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	Fri May 31 13:27:04 2013 +0100
+++ b/libinterp/interp-core/mex.cc	Fri May 31 10:43:53 2013 -0400
@@ -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));
         }