Mercurial > hg > octave-nkf
changeset 16708:08f0f274de36
use correct "caller" workspace for mexputvariable and mexgetvariable
* mex.cc (mexPutVariable, mexGetVariable): For "caller", don't call
octave_call_stack::goto_caller_frame. Return immediately if an error
occurs when setting current scope to base frame.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Fri, 31 May 2013 10:43:53 -0400 |
parents | 4c11e9bcb796 |
children | 1070f2ca1367 |
files | libinterp/interp-core/mex.cc |
diffstat | 1 files changed, 24 insertions(+), 14 deletions(-) [+] |
line wrap: on
line diff
--- a/libinterp/interp-core/mex.cc +++ b/libinterp/interp-core/mex.cc @@ -3184,13 +3184,18 @@ if (caller || base) { - if (caller) - octave_call_stack::goto_caller_frame (); - else - octave_call_stack::goto_base_frame (); - - if (! error_state) - frame.add_fcn (octave_call_stack::pop); + // MEX files don't create a separate frame in the call stack, + // so we are already in the "caller" frame. + + if (base) + { + octave_call_stack::goto_base_frame (); + + if (error_state) + return retval; + + frame.add_fcn (octave_call_stack::pop); + } val = symbol_table::varval (name); } @@ -3242,13 +3247,18 @@ if (caller || base) { - if (caller) - octave_call_stack::goto_caller_frame (); - else - octave_call_stack::goto_base_frame (); - - if (! error_state) - frame.add_fcn (octave_call_stack::pop); + // MEX files don't create a separate frame in the call stack, + // so we are already in the "caller" frame. + + if (base) + { + octave_call_stack::goto_base_frame (); + + if (error_state) + return 1; + + frame.add_fcn (octave_call_stack::pop); + } symbol_table::assign (name, mxArray::as_octave_value (ptr)); }