changeset 27234:279074d7a3b9

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.
author John W. Eaton <jwe@octave.org>
date Thu, 11 Jul 2019 14:21:37 -0400
parents fc668ac9ce7c
children e12571df6466
files libinterp/parse-tree/pt-eval.cc libinterp/parse-tree/pt-eval.h
diffstat 2 files changed, 20 insertions(+), 29 deletions(-) [+]
line wrap: on
line diff
--- 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<int>::pop);
+
+    expr->accept (*this);
+  }
+
+  void
   tree_evaluator::do_breakpoint (tree_statement& stmt)
   {
     do_breakpoint (stmt.is_active_breakpoint (*this),
--- 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,