changeset 27203:79065f9d5553

eliminate direct access to call stack in load-save functions * pt-eval.h, pt-eval.cc (tree_evaluator::glob_symbol_info, tree_evaluator::regexp_symbol_info, tree_evaluator::get_symbol_info, tree_evaluator::top_scope_symbol_info): New functions. * load-save.cc (load_save_system::save_vars, load_save_system::dump_octave_core): Eliminate direct access to call stack.
author John W. Eaton <jwe@octave.org>
date Mon, 01 Apr 2019 18:00:15 +0000
parents 23962b243bad
children 9a3e92d02a03
files libinterp/corefcn/load-save.cc libinterp/parse-tree/pt-eval.cc libinterp/parse-tree/pt-eval.h
diffstat 3 files changed, 37 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/libinterp/corefcn/load-save.cc	Mon Apr 01 17:47:24 2019 +0000
+++ b/libinterp/corefcn/load-save.cc	Mon Apr 01 18:00:15 2019 +0000
@@ -906,9 +906,9 @@
                                       const load_save_format& fmt,
                                       bool save_as_floats)
   {
-    call_stack& cs = m_interpreter.get_call_stack ();
+    tree_evaluator& tw = m_interpreter.get_evaluator ();
 
-    symbol_info_list syminfo_list = cs.glob_symbol_info (pattern);
+    symbol_info_list syminfo_list = tw.glob_symbol_info (pattern);
 
     size_t saved = 0;
 
@@ -1024,9 +1024,9 @@
   {
     write_header (os, fmt);
 
-    call_stack& cs = m_interpreter.get_call_stack ();
+    tree_evaluator& tw = m_interpreter.get_evaluator ();
 
-    symbol_info_list syminfo_list = cs.top_scope_symbol_info ();
+    symbol_info_list syminfo_list = tw.top_scope_symbol_info ();
 
     double save_mem_size = 0;
 
--- a/libinterp/parse-tree/pt-eval.cc	Mon Apr 01 17:47:24 2019 +0000
+++ b/libinterp/parse-tree/pt-eval.cc	Mon Apr 01 18:00:15 2019 +0000
@@ -4460,6 +4460,30 @@
                                   "max_recursion_depth", 0);
   }
 
+  symbol_info_list
+  tree_evaluator::glob_symbol_info (const std::string& pattern) const
+  {
+    return m_call_stack.glob_symbol_info (pattern);
+  }
+
+  symbol_info_list
+  tree_evaluator::regexp_symbol_info (const std::string& pattern) const
+  {
+    return m_call_stack.regexp_symbol_info (pattern);
+  }
+
+  symbol_info_list
+  tree_evaluator::get_symbol_info (void)
+  {
+    return m_call_stack.get_symbol_info ();
+  }
+
+  symbol_info_list
+  tree_evaluator::top_scope_symbol_info (void) const
+  {
+    return m_call_stack.top_scope_symbol_info ();
+  }
+
   octave_map tree_evaluator::get_autoload_map (void) const
   {
     Cell func_names (dim_vector (m_autoload_map.size (), 1));
--- a/libinterp/parse-tree/pt-eval.h	Mon Apr 01 17:47:24 2019 +0000
+++ b/libinterp/parse-tree/pt-eval.h	Mon Apr 01 18:00:15 2019 +0000
@@ -42,6 +42,7 @@
 
 namespace octave
 {
+  class symbol_info_list;
   class symbol_scope;
   class tree_decl_elt;
   class tree_expression;
@@ -563,6 +564,14 @@
 
     bool in_user_code (void) const;
 
+    symbol_info_list glob_symbol_info (const std::string& pattern) const;
+
+    symbol_info_list regexp_symbol_info (const std::string& pattern) const;
+
+    symbol_info_list get_symbol_info (void);
+
+    symbol_info_list top_scope_symbol_info (void) const;
+
     octave_map get_autoload_map (void) const;
 
     std::string lookup_autoload (const std::string& nm) const;