diff libinterp/corefcn/load-save.cc @ 26092:661dfb062485

use symbol_info_list to gather data for save function * call-stack.h, call-stack.cc (call_stack::glob_symbol_info, call_stack::stack_frame::glob_symbol_info): New functions. * load-save.cc (do_save): Use them to get data to save from current stack frame.
author John W. Eaton <jwe@octave.org>
date Fri, 16 Nov 2018 00:18:57 -0500
parents 3fc9d7453ba6
children 6a03af2c4c9e
line wrap: on
line diff
--- a/libinterp/corefcn/load-save.cc	Fri Nov 16 00:16:44 2018 -0500
+++ b/libinterp/corefcn/load-save.cc	Fri Nov 16 00:18:57 2018 -0500
@@ -65,6 +65,7 @@
 #include "oct-map.h"
 #include "ov-cell.h"
 #include "pager.h"
+#include "syminfo.h"
 #include "symtab.h"
 #include "sysdep.h"
 #include "unwind-prot.h"
@@ -913,18 +914,15 @@
                                       const load_save_format& fmt,
                                       bool save_as_floats)
   {
-    symbol_scope scope
-      = m_interpreter.require_current_scope ("load_save_system::save_vars");
+    call_stack& cs = m_interpreter.get_call_stack ();
 
-    symbol_record::context_id context = scope.current_context ();
-
-    std::list<symbol_record> vars = scope.glob (pattern);
+    symbol_info_list syminfo_list = cs.glob_symbol_info (pattern);
 
     size_t saved = 0;
 
-    for (const auto& var : vars)
+    for (const auto& syminfo : syminfo_list)
       {
-        do_save (os, var, context, fmt, save_as_floats);
+        do_save (os, syminfo, fmt, save_as_floats);
 
         saved++;
       }
@@ -982,18 +980,17 @@
   // Save the info from SR on stream OS in the format specified by FMT.
 
   void load_save_system::do_save (std::ostream& os,
-                                  const symbol_record& sr,
-                                  symbol_record::context_id context,
+                                  const symbol_info& syminfo,
                                   const load_save_format& fmt,
                                   bool save_as_floats)
   {
-    octave_value val = sr.varval (context);
+    octave_value val = syminfo.value ();
 
     if (val.is_defined ())
       {
-        std::string name = sr.name ();
+        std::string name = syminfo.name ();
         std::string help;
-        bool global = sr.is_global ();
+        bool global = syminfo.is_global ();
 
         do_save (os, val, name, help, global, fmt, save_as_floats);
       }