Mercurial > octave-nkf
diff src/ov-usr-fcn.cc @ 5743:a527e0f77aa5
[project @ 2006-04-06 08:20:21 by jwe]
author | jwe |
---|---|
date | Thu, 06 Apr 2006 08:20:23 +0000 |
parents | 2618a0750ae6 |
children | 1c36a2e82266 |
line wrap: on
line diff
--- a/src/ov-usr-fcn.cc Thu Apr 06 08:15:49 2006 +0000 +++ b/src/ov-usr-fcn.cc Thu Apr 06 08:20:23 2006 +0000 @@ -393,13 +393,12 @@ unwind_protect_ptr (curr_sym_tab); curr_sym_tab = sym_tab; - unwind_protect_ptr (curr_function); - unwind_protect_ptr (curr_caller_function); unwind_protect_ptr (curr_caller_statement); + curr_caller_statement = curr_statement; - curr_caller_statement = curr_statement; - curr_caller_function = curr_function; - curr_function = this; + octave_call_stack::push (this); + + unwind_protect::add (octave_call_stack::unwind_pop, 0); if (! is_nested_function ()) { @@ -747,10 +746,12 @@ if (nargin == 0) { - if (curr_function) + octave_function *fcn = octave_call_stack::caller_script (); + + if (fcn) { - if (curr_function->takes_varargs ()) - retval = curr_function->octave_va_arg (); + if (fcn->takes_varargs ()) + retval = fcn->octave_va_arg (); else { ::error ("va_arg only valid within function taking variable"); @@ -789,10 +790,12 @@ if (nargin == 0) { - if (curr_function) + octave_function *fcn = octave_call_stack::caller_script (); + + if (fcn) { - if (curr_function->takes_varargs ()) - curr_function->octave_va_start (); + if (fcn->takes_varargs ()) + fcn->octave_va_start (); else { ::error ("va_start only valid within function taking variable"); @@ -833,12 +836,14 @@ if (nargin == 1) { - if (curr_function) + octave_function *fcn = octave_call_stack::caller_script (); + + if (fcn) { - if (curr_function->has_varargout ()) + if (fcn->has_varargout ()) ::error ("vr_val and varargout cannot both be used in the same function"); - else if (curr_function->takes_var_return ()) - curr_function->octave_vr_val (args(0)); + else if (fcn->takes_var_return ()) + fcn->octave_vr_val (args(0)); else { ::error ("vr_val only valid within function declared to");