# HG changeset patch # User John W. Eaton # Date 1562869297 14400 # Node ID 279074d7a3b9b69691514c5b6a2c6fcb20f39c62 # Parent fc668ac9ce7ce0b8c05916938d7b829c159a29e8 eliminate unused tree_evaluator::reset function * pt-eval.h, pt-eval.cc (tree_evaluator::reset): Delete unused function. (tree_evaluator::evaluate_internal): New function. Use unwind_protect to ensure nargout_stack is properly restored. (tree_evaluator::evaluate): Use new evaluate_internal function. Reset m_result_type before returning. diff -r fc668ac9ce7c -r 279074d7a3b9 libinterp/parse-tree/pt-eval.cc --- a/libinterp/parse-tree/pt-eval.cc Thu Jul 11 14:16:08 2019 -0400 +++ b/libinterp/parse-tree/pt-eval.cc Thu Jul 11 14:21:37 2019 -0400 @@ -296,23 +296,6 @@ return m_call_stack.at_top_level (); } - void - tree_evaluator::reset (void) - { - m_statement_context = SC_OTHER; - m_result_type = RT_UNDEFINED; - m_expr_result_value = octave_value (); - m_expr_result_value_list = octave_value_list (); - m_lvalue_list_stack.clear (); - m_nargout_stack.clear (); - - while (! m_debugger_stack.empty ()) - { - delete m_debugger_stack.top (); - m_debugger_stack.pop (); - } - } - int tree_evaluator::repl (bool interactive) { int retval = 0; @@ -4398,6 +4381,18 @@ } void + tree_evaluator::evaluate_internal (tree_expression *expr, int nargout) + { + unwind_protect frame; + + m_nargout_stack.push (nargout); + + frame.add_method (m_nargout_stack, &value_stack::pop); + + expr->accept (*this); + } + + void tree_evaluator::do_breakpoint (tree_statement& stmt) { do_breakpoint (stmt.is_active_breakpoint (*this), diff -r fc668ac9ce7c -r 279074d7a3b9 libinterp/parse-tree/pt-eval.h --- a/libinterp/parse-tree/pt-eval.h Thu Jul 11 14:16:08 2019 -0400 +++ b/libinterp/parse-tree/pt-eval.h Thu Jul 11 14:21:37 2019 -0400 @@ -156,8 +156,6 @@ bool at_top_level (void) const; - void reset (void); - int repl (bool interactive); std::string mfilename (const std::string& opt = "") const; @@ -334,11 +332,7 @@ { octave_value retval; - m_nargout_stack.push (nargout); - - expr->accept (*this); - - m_nargout_stack.pop (); + evaluate_internal (expr, nargout); switch (m_result_type) { @@ -358,6 +352,8 @@ break; } + m_result_type = RT_UNDEFINED; + return retval; } @@ -365,11 +361,7 @@ { octave_value_list retval; - m_nargout_stack.push (nargout); - - expr->accept (*this); - - m_nargout_stack.pop (); + evaluate_internal (expr, nargout); switch (m_result_type) { @@ -388,6 +380,8 @@ break; } + m_result_type = RT_UNDEFINED; + return retval; } @@ -797,6 +791,8 @@ bool maybe_push_echo_state_cleanup (void); + void evaluate_internal (tree_expression *expr, int nargout); + void do_breakpoint (tree_statement& stmt); void do_breakpoint (bool is_breakpoint,