diff libinterp/corefcn/load-save.cc @ 26093:6a03af2c4c9e

use symbol_info_list to gather data for saving workspace on crash * call-stack.h, call-stack.cc (stack_frame::make_symbol_info_list): New function. (stack_frame::glob_symbol_info): Use it. (stack_frame::regexp_symbol_info, stack_frame::get_symbol_info): New functions. * (call_stack::regexp_symbol_info, call_stack::get_symbol_info, call_stack::top_scope_symbol_info): New functions. * load-save.cc (load_save_system::dump_octave_core): Call call_stack::top_scope_symbol_info to get data to save.
author John W. Eaton <jwe@octave.org>
date Fri, 16 Nov 2018 02:42:26 -0500
parents 661dfb062485
children 00f796120a6d
line wrap: on
line diff
--- a/libinterp/corefcn/load-save.cc	Fri Nov 16 00:18:57 2018 -0500
+++ b/libinterp/corefcn/load-save.cc	Fri Nov 16 02:42:26 2018 -0500
@@ -1032,37 +1032,30 @@
   {
     write_header (os, fmt);
 
-    symbol_table& symtab = m_interpreter.get_symbol_table ();
-
-    symbol_scope top_scope = symtab.top_scope ();
+    call_stack& cs = m_interpreter.get_call_stack ();
 
-    symbol_record::context_id context = top_scope.current_context ();
-
-    std::list<symbol_record> vars = top_scope.all_variables ();
+    symbol_info_list syminfo_list = cs.top_scope_symbol_info ();
 
     double save_mem_size = 0;
 
-    for (const auto& var : vars)
+    for (const auto& syminfo : syminfo_list)
       {
-        octave_value val = var.varval (context);
+        octave_value val = syminfo.value ();
 
-        if (val.is_defined ())
-          {
-            std::string name = var.name ();
-            std::string help;
-            bool global = var.is_global ();
+        std::string name = syminfo.name ();
+        std::string help;
+        bool global = syminfo.is_global ();
 
-            double val_size = val.byte_size () / 1024;
+        double val_size = val.byte_size () / 1024;
 
-            // FIXME: maybe we should try to throw out the largest first...
+        // FIXME: maybe we should try to throw out the largest first...
 
-            if (m_octave_core_file_limit < 0
-                || save_mem_size + val_size < m_octave_core_file_limit)
-              {
-                save_mem_size += val_size;
+        if (m_octave_core_file_limit < 0
+            || save_mem_size + val_size < m_octave_core_file_limit)
+          {
+            save_mem_size += val_size;
 
-                do_save (os, val, name, help, global, fmt, save_as_floats);
-              }
+            do_save (os, val, name, help, global, fmt, save_as_floats);
           }
       }