changeset 29446:435fc29162c0

maintain a set of watch expressions for possible use in tracing/debugging * pt-eval.h (tree_evaluator::m_debug_watch_expressions): New data member. (tree_evaluator::add_debug_watch_expression, tree_evaluator::remove_debug_watch_expression, tree_evaluator::clear_debug_watch_expression, tree_evaluator::debug_watch_expressions): New functions. * interpreter.h, interpreter.cc (interpreter::add_debug_watch_expression, interpreter::remove_debug_watch_expression, interpreter::clear_debug_watch_expression, interpreter::debug_watch_expressions): New functions.
author John W. Eaton <jwe@octave.org>
date Wed, 17 Mar 2021 00:50:34 -0400
parents b5f3ae7610cf
children b8704da94c1a
files libinterp/corefcn/interpreter.cc libinterp/corefcn/interpreter.h libinterp/parse-tree/pt-eval.h
diffstat 3 files changed, 67 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/libinterp/corefcn/interpreter.cc	Tue Mar 16 18:17:42 2021 +0100
+++ b/libinterp/corefcn/interpreter.cc	Wed Mar 17 00:50:34 2021 -0400
@@ -1768,6 +1768,26 @@
       m_evaluator.dbcont ();
   }
 
+  void interpreter::add_debug_watch_expression (const std::string& expr)
+  {
+    m_evaluator.add_debug_watch_expression (expr);
+  }
+
+  void interpreter::remove_debug_watch_expression (const std::string& expr)
+  {
+    m_evaluator.remove_debug_watch_expression (expr);
+  }
+
+  void interpreter::clear_debug_watch_expressions (void)
+  {
+    m_evaluator.clear_debug_watch_expressions ();
+  }
+
+  std::set<std::string> interpreter::debug_watch_expressions (void) const
+  {
+    return m_evaluator.debug_watch_expressions ();
+  }
+
   void interpreter::handle_exception (const execution_exception& ee)
   {
     m_error_system.save_exception (ee);
--- a/libinterp/corefcn/interpreter.h	Tue Mar 16 18:17:42 2021 +0100
+++ b/libinterp/corefcn/interpreter.h	Wed Mar 17 00:50:34 2021 -0400
@@ -29,6 +29,7 @@
 #include "octave-config.h"
 
 #include <map>
+#include <set>
 #include <stack>
 #include <string>
 
@@ -487,6 +488,22 @@
     // or server loop.
     void stop (void);
 
+    // Add EXPR to the set of expressions that may be evaluated when the
+    // debugger stops at a breakpoint.
+    void add_debug_watch_expression (const std::string& expr);
+
+    // Remove EXPR from the set of expressions that may be evaluated
+    // when the debugger stops at a breakpoint.
+    void remove_debug_watch_expression (const std::string& expr);
+
+    // Clear the set of expressions that may be evaluated when the
+    // debugger stops at a breakpoint.
+    void clear_debug_watch_expressions (void);
+
+    // Return the set of expressions that may be evaluated when the
+    // debugger stops at a breakpoint.
+    std::set<std::string> debug_watch_expressions (void) const;
+
     // Resume interpreter execution if paused.
     void resume (void);
 
--- a/libinterp/parse-tree/pt-eval.h	Tue Mar 16 18:17:42 2021 +0100
+++ b/libinterp/parse-tree/pt-eval.h	Wed Mar 17 00:50:34 2021 -0400
@@ -647,6 +647,34 @@
 
     void dbquit (bool all = false);
 
+    // Add EXPR to the set of expressions that may be evaluated when the
+    // debugger stops at a breakpoint.
+    void add_debug_watch_expression (const std::string& expr)
+    {
+      m_debug_watch_expressions.insert (expr);
+    }
+
+    // Remove EXPR from the set of expressions that may be evaluated
+    // when the debugger stops at a breakpoint.
+    void remove_debug_watch_expression (const std::string& expr)
+    {
+      m_debug_watch_expressions.erase (expr);
+    }
+
+    // Clear the set of expressions that may be evaluated when the
+    // debugger stops at a breakpoint.
+    void clear_debug_watch_expressions (void)
+    {
+      m_debug_watch_expressions.clear ();
+    }
+
+    // Return the set of expressions that may be evaluated when the
+    // debugger stops at a breakpoint.
+    std::set<std::string> debug_watch_expressions (void) const
+    {
+      return m_debug_watch_expressions;
+    }
+
     octave_value PS4 (const octave_value_list& args, int nargout);
 
     std::string PS4 (void) const { return m_PS4; }
@@ -864,6 +892,8 @@
     // previous debugger (if any) that is now at the top of the stack.
     std::stack<debugger *> m_debugger_stack;
 
+    std::set<std::string> m_debug_watch_expressions;
+
     int m_exit_status;
 
     // Maximum nesting level for functions, scripts, or sourced files