Mercurial > octave
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); } }