Mercurial > octave
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