diff libinterp/parse-tree/oct-parse.yy @ 27160:6b0c61a5a0f0

move global error configuration and status variables inside a class * error.h, error.cc (error_system): New class. (Vbacktrace_on_warning, Vbeep_on_error, Vdebug_on_caught, Vdebug_on_error, Vdebug_on_warning, Vlast_error_id, Vlast_error_message, Vlast_error_stack, Vlast_warning_id, Vlast_warning_message, Vquiet_warning, Vverbose_warning, buffer_error_messages, discard_error_messages, discard_warning_messages, in_try_catch, warning_options): Move global and file-scope static variables inside error_system class. Change all uses. * interpreter.h, interpreter.cc (m_error_system): New member variable. (get_error_system): New function. * interpreter-private.h, interpreter-private.cc (__get_error_system__): New function.
author John W. Eaton <jwe@octave.org>
date Fri, 31 May 2019 15:49:38 +0000
parents 84ff9953faa1
children 58bdc2d98481
line wrap: on
line diff
--- a/libinterp/parse-tree/oct-parse.yy	Fri Jun 07 13:29:41 2019 -0400
+++ b/libinterp/parse-tree/oct-parse.yy	Fri May 31 15:49:38 2019 +0000
@@ -2500,13 +2500,18 @@
   {
     tree_expression *retval = nullptr;
 
+    interpreter& interp = __get_interpreter__ ("finish_colon_expression");
+    error_system& es = interp.get_error_system ();
+
     unwind_protect frame;
 
-    frame.protect_var (discard_error_messages);
-    frame.protect_var (discard_warning_messages);
-
-    discard_error_messages = true;
-    discard_warning_messages = true;
+    frame.add_method (es, &error_system::set_discard_error_messages,
+                      es.discard_error_messages ());
+    frame.add_method (es, &error_system::set_discard_warning_messages,
+                      es.discard_warning_messages ());
+
+    es.discard_error_messages (true);
+    es.discard_warning_messages (true);
 
     if (! base || ! limit)
       {
@@ -2528,8 +2533,7 @@
       {
         try
           {
-            tree_evaluator& tw
-              = __get_evaluator__ ("finish_colon_expression");
+            tree_evaluator& tw = interp.get_evaluator ();
 
             octave_value tmp = tw.evaluate (e);
 
@@ -4163,20 +4167,24 @@
   {
     tree_expression *retval = array_list;
 
+    interpreter& interp = __get_interpreter__ ("finish_array_list");
+    error_system& es = interp.get_error_system ();
+
     unwind_protect frame;
 
-    frame.protect_var (discard_error_messages);
-    frame.protect_var (discard_warning_messages);
-
-    discard_error_messages = true;
-    discard_warning_messages = true;
+    frame.add_method (es, &error_system::set_discard_error_messages,
+                      es.discard_error_messages ());
+    frame.add_method (es, &error_system::set_discard_warning_messages,
+                      es.discard_warning_messages ());
+
+    es.discard_error_messages (true);
+    es.discard_warning_messages (true);
 
     if (array_list->all_elements_are_constant ())
       {
         try
           {
-            tree_evaluator& tw
-              = __get_evaluator__ ("finish_array_list");
+            tree_evaluator& tw = interp.get_evaluator ();
 
             octave_value tmp = tw.evaluate (array_list);
 
@@ -5144,10 +5152,19 @@
 maybe_print_last_error_message (bool *doit)
 {
   if (doit && *doit)
-    // Print error message again, which was lost because of the stderr buffer
-    // Note: this keeps error_state and last_error_stack intact
-    message_with_id ("error", last_error_id ().c_str (),
-                     "%s", last_error_message ().c_str ());
+    {
+      // Print error message again, which was lost because of the stderr
+      // buffer.  Note: this keeps error_state and last_error_stack
+      // intact.
+
+      octave::error_system& es
+        = octave::__get_error_system__ ("maybe_print_last_error_message");
+
+      std::string id = es.last_error_id ();
+      std::string msg = es.last_error_message ();
+
+      message_with_id ("error", id.c_str (), "%s", msg.c_str ());
+    }
 }
 
 static void