# HG changeset patch # User John W. Eaton # Date 1218048016 14400 # Node ID b3e667f1ab4ca5064c6a4bac2957f4ed0de0780b # Parent 63dbb85452ccda8a032ba8548083545de03d8f4d call backtrace_error_message in eval functions, not when popping stack diff --git a/src/ChangeLog b/src/ChangeLog --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,15 @@ +2008-08-06 John W. Eaton + + * ov-usr-fcn.cc (octave_user_function::do_multi_index_op, + octave_user_script::do_multi_index_op): + Call octave_call_stack::backtrace_error_message. + * toplev.h (octave_call_stack::do_pop): Don't call + backtrace_error_message here. + * toplev.cc, toplev.h (octave_call_stack::do_backtrace_error_message): + Rename from octave_call_stack::backtrace_error_message. + * toplev.h (octave_call_stack::backtrace_error_message): + New public static function. + 2008-08-05 John W. Eaton * gripes.cc (gripe_truncated_conversion, diff --git a/src/ov-usr-fcn.cc b/src/ov-usr-fcn.cc --- a/src/ov-usr-fcn.cc +++ b/src/ov-usr-fcn.cc @@ -134,6 +134,9 @@ if (tree_break_command::breaking) tree_break_command::breaking--; + + if (error_state) + octave_call_stack::backtrace_error_message (); } else ::error ("max_recursion_limit exceeded"); @@ -444,7 +447,10 @@ tree_break_command::breaking--; if (error_state) - goto abort; + { + octave_call_stack::backtrace_error_message (); + goto abort; + } // Copy return values out. diff --git a/src/toplev.cc b/src/toplev.cc --- a/src/toplev.cc +++ b/src/toplev.cc @@ -473,7 +473,7 @@ } void -octave_call_stack::backtrace_error_message (void) const +octave_call_stack::do_backtrace_error_message (void) const { if (error_state > 0) { diff --git a/src/toplev.h b/src/toplev.h --- a/src/toplev.h +++ b/src/toplev.h @@ -266,6 +266,12 @@ instance->do_clear (); } + static void backtrace_error_message (void) + { + if (instance_ok ()) + instance->do_backtrace_error_message (); + } + private: // The current call stack. @@ -380,9 +386,6 @@ { if (cs.size () > 1) { - if (error_state) - backtrace_error_message (); - const call_stack_elt& elt = cs.back (); curr_frame = elt.prev; cs.pop_back (); @@ -393,7 +396,7 @@ void do_clear (void) { cs.clear (); } - void backtrace_error_message (void) const; + void do_backtrace_error_message (void) const; }; #endif