26#if defined (HAVE_CONFIG_H)
141 void display (
bool follow =
true)
const;
195 static std::shared_ptr<stack_frame>
226 std::size_t& frame_offset,
227 std::size_t& data_offset);
230 std::size_t& frame_offset,
231 std::size_t& data_offset)
const;
234 std::size_t& data_offset)
const;
260 void display (
bool follow =
true)
const;
323 return m_flags.at (data_offset);
328 m_flags.at (data_offset) = flag;
357 void display (
bool follow =
true)
const;
402 const std::shared_ptr<stack_frame>&
access_link = std::shared_ptr<stack_frame> ())
416 const std::shared_ptr<stack_frame>&
access_link = std::shared_ptr<stack_frame> ())
426 for (
const auto& nm_ov : local_vars)
427 assign (nm_ov.first, nm_ov.second);
442 static std::shared_ptr<stack_frame>
479 void display (
bool follow =
true)
const;
549 void display (
bool follow =
true)
const;
567 os <<
"scope: " << scope.
name () << std::endl;
571 os <<
"name (frame offset, data offset, storage class):"
574 std::list<symbol_record> symbols = scope.
symbol_list ();
576 for (
auto& sym : symbols)
578 os <<
" " << sym.name () <<
" (" << sym.frame_offset ()
579 <<
", " << sym.data_offset () <<
", " << sym.storage_class ()
649 std::shared_ptr<stack_frame> slink = frame.
static_link ();
652 slink->accept (*
this);
657 std::shared_ptr<stack_frame> alink = frame.
access_link ();
660 alink->accept (*
this);
667 std::shared_ptr<stack_frame> alink = frame.
access_link ();
670 alink->accept (*
this);
677 std::shared_ptr<stack_frame> alink = frame.
access_link ();
680 alink->accept (*
this);
712 const std::list<symbol_record>& symbols)
716 for (
const auto& sym : symbols)
729 for (
const auto& sym : symbols)
746 for (
const auto& sym : symbols)
748 if (pat.
match (sym.name ()))
759 std::list<symbol_record> symbols = scope.
symbol_list ();
779 bool have_regexp =
false)
786 bool have_regexp =
false)
817 std::list<std::string>
names (
void)
const
819 std::list<std::string> retval;
825 std::list<std::string> nm_list = lst.
names ();
827 for (
const auto& nm : nm_list)
828 retval.push_back (nm);
842 for (
const auto& syminf : lst)
862 std::string scope_name = nm_sil.first;
865 map_list[j] = lst.
map_value (scope_name, n_frames-j);
877 os <<
"\nvariables in scope: " << nm_sil.first <<
"\n\n";
891 std::shared_ptr<stack_frame> slink = frame.
static_link ();
894 slink->accept (*
this);
899 std::shared_ptr<stack_frame> alink = frame.
access_link ();
902 alink->accept (*
this);
909 std::shared_ptr<stack_frame> alink = frame.
access_link ();
912 alink->accept (*
this);
919 std::shared_ptr<stack_frame> alink = frame.
access_link ();
922 alink->accept (*
this);
933 std::list<symbol_record>
936 std::list<symbol_record> new_symbols;
940 for (
const auto& sym : symbols)
944 std::string
name = sym.name ();
952 new_symbols.push_back (sym);
966 for (
const auto& sym : symbols)
968 std::string
name = sym.name ();
978 new_symbols.push_back (sym);
993 for (
const auto& sym : symbols)
995 std::string
name = sym.name ();
1005 new_symbols.push_back (sym);
1018 std::list<symbol_record> symbols = scope.
symbol_list ();
1021 symbols =
filter (frame, symbols);
1041 const std::shared_ptr<stack_frame>& parent_link,
1042 const std::shared_ptr<stack_frame>& static_link)
1050 const std::shared_ptr<stack_frame>& parent_link,
1051 const std::shared_ptr<stack_frame>& static_link)
1058 const std::shared_ptr<stack_frame>& parent_link,
1059 const std::shared_ptr<stack_frame>& static_link,
1060 const std::shared_ptr<stack_frame>& access_link)
1067 const std::shared_ptr<stack_frame>& parent_link,
1068 const std::shared_ptr<stack_frame>& static_link,
1070 const std::shared_ptr<stack_frame>& access_link)
1077 const std::shared_ptr<stack_frame>& parent_link,
1078 const std::shared_ptr<stack_frame>& static_link)
1089 warning (
"invalid call to stack_frame::clear_values; please report");
1097 for (
const auto& sym : symrec_list)
1108 symbol_stats.
append (syminf);
1111 return symbol_stats;
1115 bool have_regexp,
bool return_list,
1116 bool verbose,
const std::string& whos_line_fmt,
1117 const std::string& msg)
1130 else if (! sym_inf_accum.
is_empty ())
1134 octave_stdout <<
"Variables visible from the current scope:\n";
1167 std::list<octave_scalar_map> ws_list;
1177 for (
const auto& sym_name : symbols.
names ())
1182 ws.
assign (sym_name, val);
1185 ws_list.push_back (ws);
1187 std::shared_ptr<stack_frame> nxt = frame->
access_link ();
1191 Cell ws_frames (ws_list.size (), 1);
1194 for (
const auto& elt : ws_list)
1195 ws_frames(i++) = elt;
1205 std::list<std::string> retval;
1209 const std::map<std::string, symbol_record>& symbols = scope.
symbols ();
1211 for (
const auto& nm_sr : symbols)
1214 retval.push_back (nm_sr.first);
1285 std::string nm = sym.
name ();
1288 "global: '%s' is defined in the current scope.\n",
1291 "global: in a future version, global variables must be declared before use.\n");
1302 "global: global value overrides existing local value");
1309 "global: existing local value used to initialize global variable");
1392 os <<
"at top level" << std::endl;
1395 os <<
"stopped in " <<
fcn_name ();
1399 os <<
" at line " <<
line ();
1409 os <<
"-- [stack_frame] (" <<
this <<
") --" << std::endl;
1411 os <<
"parent link: ";
1418 os <<
"static link: ";
1425 os <<
"access link: ";
1432 os <<
"line: " <<
m_line << std::endl;
1433 os <<
"column: " <<
m_column << std::endl;
1434 os <<
"index: " <<
m_index << std::endl;
1441 os <<
"FOLLOWING ACCESS LINKS:" << std::endl;
1442 std::shared_ptr<stack_frame> frm =
access_link ();
1445 frm->display (
false);
1448 frm = frm->access_link ();
1456 os <<
"-- [compiled_fcn_stack_frame] (" <<
this <<
") --" << std::endl;
1471 const std::shared_ptr<stack_frame>& parent_link,
1472 const std::shared_ptr<stack_frame>& static_link)
1473 :
stack_frame (tw, index, parent_link, static_link,
1474 get_access_link (static_link)),
1475 m_script (script), m_unwind_protect_frame (nullptr),
1476 m_lexical_frame_offsets (get_num_symbols (script), 1),
1477 m_value_offsets (get_num_symbols (script), 0)
1496 std::size_t num_script_symbols = script_scope.
num_symbols ();
1498 resize (num_script_symbols);
1500 const std::map<std::string, symbol_record>& script_symbols
1507 (
const std::map<std::string, symbol_record>& script_symbols)
1518 for (
const auto& nm_sr : script_symbols)
1520 std::string
name = nm_sr.first;
1525 std::size_t count = 1;
1527 while (parent_scope)
1529 const std::map<std::string, symbol_record>& parent_scope_symbols
1532 auto p = parent_scope_symbols.find (
name);
1534 if (p != parent_scope_symbols.end ())
1539 std::size_t script_sr_data_offset = script_sr.
data_offset ();
1557 error (
"symbol '%s' cannot be added to static scope",
1563 const std::map<std::string, symbol_record>& eval_scope_symbols
1566 for (
const auto& nm_sr : script_symbols)
1568 std::string
name = nm_sr.first;
1571 auto p = eval_scope_symbols.find (
name);
1575 if (p == eval_scope_symbols.end ())
1578 eval_scope_sr = p->second;
1580 std::size_t script_sr_data_offset = script_sr.
data_offset ();
1602 assert (data_offset >=
size ());
1610 std::map<std::string, symbol_record> tmp_symbols;
1611 tmp_symbols[sym.
name ()] = sym;
1618 std::shared_ptr<stack_frame>
1626 while (alink->is_user_script_frame ())
1628 if (alink->access_link ())
1629 alink = alink->access_link ();
1705 std::size_t& frame_offset,
1706 std::size_t& data_offset)
const
1717 std::string
name = script_sr.
name ();
1721 std::size_t count = 1;
1723 while (parent_scope)
1725 const std::map<std::string, symbol_record>& parent_scope_symbols
1728 auto p = parent_scope_symbols.find (
name);
1730 if (p != parent_scope_symbols.end ())
1735 frame_offset = parent_scope_sr.
frame_offset () + count;
1750 const std::map<std::string, symbol_record>& eval_scope_symbols
1753 std::string
name = script_sr.
name ();
1755 auto p = eval_scope_symbols.find (
name);
1759 if (p != eval_scope_symbols.end ())
1762 eval_scope_sr = p->second;
1777 std::size_t& frame_offset,
1778 std::size_t& data_offset)
const
1783 if (frame_offset == 0)
1791 if (data_offset >=
size ())
1802 if (frame_offset == 0)
1826 std::size_t& frame_offset,
1827 std::size_t& data_offset)
1832 if (frame_offset == 0)
1834 if (data_offset >=
size ())
1851 if (frame_offset == 0)
1866 std::map<std::string, symbol_record> tmp_symbols;
1867 tmp_symbols[sym.
name ()] = sym;
1889 std::size_t frame_offset;
1890 std::size_t data_offset;
1903 for (std::size_t i = 0; i < frame_offset; i++)
1905 std::shared_ptr<stack_frame> nxt = frame->
access_link ();
1910 error (
"internal error: invalid access link in function call stack");
1912 if (data_offset >= frame->
size ())
1920 std::size_t frame_offset;
1921 std::size_t data_offset;
1933 for (std::size_t i = 0; i < frame_offset; i++)
1935 std::shared_ptr<stack_frame> nxt = frame->
access_link ();
1940 error (
"internal error: invalid access link in function call stack");
1942 if (data_offset >= frame->
size ())
1948 return frame->
varval (data_offset);
1961 error (
"internal error: invalid switch case");
1966 std::size_t frame_offset;
1967 std::size_t data_offset;
1975 for (std::size_t i = 0; i < frame_offset; i++)
1977 std::shared_ptr<stack_frame> nxt = frame->
access_link ();
1981 if (data_offset >= frame->
size ())
1982 frame->
resize (data_offset+1);
1987 return frame->
varref (data_offset);
2000 error (
"internal error: invalid switch case");
2008 if (data_offset >=
size ())
2016 if (frame_offset > 1)
2017 error (
"variables must be made PERSISTENT or GLOBAL in the first scope in which they are used");
2019 std::shared_ptr<stack_frame> frame =
access_link ();
2021 if (data_offset >= frame->size ())
2022 frame->resize (data_offset+1);
2024 frame->set_scope_flag (data_offset, flag);
2031 os <<
"-- [script_stack_frame] (" <<
this <<
") --" << std::endl;
2061 os <<
"-- [base_value_stack_frame] (" <<
this <<
") --" << std::endl;
2064 os <<
"values: " <<
m_values.size ()
2065 <<
" elements (idx, scope flag, type):" << std::endl;
2067 for (std::size_t i = 0; i <
m_values.size (); i++)
2069 os <<
" (" << i <<
", " <<
m_flags.at (i) <<
", ";
2081 std::shared_ptr<stack_frame>
2083 const std::shared_ptr<stack_frame>& static_link)
2085 std::shared_ptr<stack_frame> alink;
2092 error (
"internal call stack error (invalid static link)");
2099 if (caller_nesting_depth < nesting_depth)
2114 int links_to_follow = caller_nesting_depth - nesting_depth + 1;
2118 while (alink && --links_to_follow >= 0)
2119 alink = alink->access_link ();
2122 error (
"internal function nesting error (invalid access link)");
2133 const std::list<symbol_record>& symbols = fcn_scope.
symbol_list ();
2138 for (
const auto& sym : symbols)
2140 std::size_t frame_offset = sym.frame_offset ();
2142 if (frame_offset > 0)
2145 std::size_t data_offset = sym.data_offset ();
2147 if (data_offset >=
size ())
2184 std::shared_ptr<stack_frame> nxt = frame->
access_link ();
2240 for (std::size_t i = 0; i < frame_offset; i++)
2242 std::shared_ptr<stack_frame> nxt = frame->
access_link ();
2247 error (
"internal error: invalid access link in function call stack");
2249 if (data_offset >= frame->
size ())
2265 for (std::size_t i = 0; i < frame_offset; i++)
2267 std::shared_ptr<stack_frame> nxt = frame->
access_link ();
2272 error (
"internal error: invalid access link in function call stack");
2274 if (data_offset >= frame->
size ())
2280 return frame->
varval (data_offset);
2293 error (
"internal error: invalid switch case");
2306 for (std::size_t i = 0; i < frame_offset; i++)
2308 std::shared_ptr<stack_frame> nxt = frame->
access_link ();
2312 if (data_offset >= frame->
size ())
2313 frame->
resize (data_offset+1);
2318 return frame->
varref (data_offset);
2331 error (
"internal error: invalid switch case");
2339 error (
"variables must be made PERSISTENT or GLOBAL in the first scope in which they are used");
2343 if (data_offset >=
size ())
2353 os <<
"-- [user_fcn_stack_frame] (" <<
this <<
") --" << std::endl;
2370 val.break_closure_cycles (frame);
2404 if (data_offset >=
size ())
2417 if (data_offset >=
size ())
2432 error (
"internal error: invalid switch case");
2442 if (data_offset >=
size ())
2457 error (
"internal error: invalid switch case");
2468 if (data_offset >=
size ())
2478 os <<
"-- [scope_stack_frame] (" <<
this <<
") --" << std::endl;
bool match(const std::string &str) const
void append(const elt_type &s)
void push_back(const elt_type &s)
void resize(std::size_t size)
stack_frame::scope_flags get_scope_flag(std::size_t data_offset) const
base_value_stack_frame(tree_evaluator &tw, std::size_t num_symbols, std::size_t index, const std::shared_ptr< stack_frame > &parent_link, const std::shared_ptr< stack_frame > &static_link, const std::shared_ptr< stack_frame > &access_link)
void set_scope_flag(std::size_t data_offset, scope_flags flag)
void display(bool follow=true) const
octave_value get_auto_fcn_var(auto_var_type avt) const
octave_value varval(std::size_t data_offset) const
std::vector< scope_flags > m_flags
std::vector< octave_value > m_values
std::vector< octave_value > m_auto_vars
base_value_stack_frame & operator=(const base_value_stack_frame &elt)=delete
std::size_t size(void) const
base_value_stack_frame(void)=delete
octave_value & varref(std::size_t data_offset)
base_value_stack_frame(const base_value_stack_frame &elt)=default
void set_auto_fcn_var(auto_var_type avt, const octave_value &val)
~base_value_stack_frame(void)=default
compiled_fcn_stack_frame & operator=(const compiled_fcn_stack_frame &elt)=delete
~compiled_fcn_stack_frame(void)=default
bool is_compiled_fcn_frame(void) const
void display(bool follow=true) const
symbol_record insert_symbol(const std::string &name)
symbol_record lookup_symbol(const std::string &name) const
stack_frame::scope_flags scope_flag(const symbol_record &sym) const
void mark_scope(const symbol_record &sym, scope_flags flag)
compiled_fcn_stack_frame(const compiled_fcn_stack_frame &elt)=default
void set_auto_fcn_var(auto_var_type avt, const octave_value &val)
octave_value varval(const symbol_record &sym) const
octave_value & varref(const symbol_record &sym)
compiled_fcn_stack_frame(tree_evaluator &tw, octave_function *fcn, std::size_t index, const std::shared_ptr< stack_frame > &parent_link, const std::shared_ptr< stack_frame > &static_link)
symbol_scope get_scope(void) const
void accept(stack_frame_walker &sfw)
octave_function * function(void) const
compiled_fcn_stack_frame(void)=delete
octave_value get_auto_fcn_var(auto_var_type avt) const
bool is_match(const std::string &buffer) const
~scope_stack_frame(void)=default
void display(bool follow=true) const
void accept(stack_frame_walker &sfw)
void mark_scope(const symbol_record &sym, scope_flags flag)
bool is_scope_frame(void) const
symbol_record insert_symbol(const std::string &)
octave_value varval(const symbol_record &sym) const
octave_value & varref(const symbol_record &sym)
scope_stack_frame & operator=(const scope_stack_frame &elt)=delete
scope_stack_frame(const scope_stack_frame &elt)=default
scope_stack_frame(tree_evaluator &tw, const symbol_scope &scope, std::size_t index, const std::shared_ptr< stack_frame > &parent_link, const std::shared_ptr< stack_frame > &static_link)
scope_stack_frame(void)=delete
symbol_scope get_scope(void) const
symbol_record lookup_symbol(const std::string &name) const
scope_flags scope_flag(const symbol_record &sym) const
octave_value & varref(const symbol_record &sym)
octave_value varval(const symbol_record &sym) const
bool get_val_offsets(const symbol_record &sym, std::size_t &frame_offset, std::size_t &data_offset) const
void set_script_offsets(void)
script_stack_frame(const script_stack_frame &elt)=default
void set_auto_fcn_var(auto_var_type avt, const octave_value &val)
unwind_protect * unwind_protect_frame(void)
void set_script_offsets_internal(const std::map< std::string, symbol_record > &symbols)
std::vector< std::size_t > m_lexical_frame_offsets
script_stack_frame(void)=delete
void resize(std::size_t size)
bool is_user_script_frame(void) const
octave_function * function(void) const
void display(bool follow=true) const
unwind_protect * m_unwind_protect_frame
scope_flags scope_flag(const symbol_record &sym) const
script_stack_frame & operator=(const script_stack_frame &elt)=delete
static std::shared_ptr< stack_frame > get_access_link(const std::shared_ptr< stack_frame > &static_link)
void mark_scope(const symbol_record &sym, scope_flags flag)
symbol_record insert_symbol(const std::string &)
void get_val_offsets_with_insert(const symbol_record &sym, std::size_t &frame_offset, std::size_t &data_offset)
symbol_record lookup_symbol(const std::string &name) const
symbol_scope get_scope(void) const
octave_value get_auto_fcn_var(auto_var_type avt) const
std::size_t size(void) const
octave_user_script * m_script
bool get_val_offsets_internal(const symbol_record &sym, std::size_t &frame_offset, std::size_t &data_offset) const
static std::size_t get_num_symbols(octave_user_script *script)
~script_stack_frame(void)
void accept(stack_frame_walker &sfw)
std::vector< std::size_t > m_value_offsets
void resize_and_update_script_offsets(const symbol_record &sym)
virtual void visit_compiled_fcn_stack_frame(compiled_fcn_stack_frame &)=0
virtual void visit_script_stack_frame(script_stack_frame &)=0
virtual void visit_scope_stack_frame(scope_stack_frame &)=0
virtual void visit_user_fcn_stack_frame(user_fcn_stack_frame &)=0
virtual ~stack_frame_walker(void)=default
stack_frame_walker & operator=(const stack_frame_walker &)=delete
stack_frame_walker(const stack_frame_walker &)=delete
bool is_persistent(const symbol_record &sym) const
void clear_variables(void)
std::size_t index(void) const
octave_value value(const symbol_record &sym, const std::string &type, const std::list< octave_value_list > &idx) const
void clear_variable_regexp(const std::string &pattern)
octave_value who(const string_vector &patterns, bool have_regexp, bool return_list, bool verbose, const std::string &whos_line_fmt, const std::string &msg)
virtual symbol_scope get_scope(void) const =0
virtual scope_flags get_scope_flag(std::size_t) const
void assign(const symbol_record &sym, const octave_value &val)
std::shared_ptr< stack_frame > m_static_link
std::shared_ptr< stack_frame > access_link(void) const
virtual void resize(std::size_t)
bool is_global(const symbol_record &sym) const
symbol_info_list all_variables(void)
symbol_info_list regexp_symbol_info(const std::string &pattern)
tree_evaluator & m_evaluator
virtual void set_scope_flag(std::size_t, scope_flags)
void clear_variable_pattern(const std::string &pattern)
virtual void display(bool follow=true) const
symbol_info_list make_symbol_info_list(const std::list< symbol_record > &symrec_list) const
std::list< std::string > variable_names(void) const
std::shared_ptr< stack_frame > m_parent_link
std::shared_ptr< stack_frame > static_link(void) const
std::shared_ptr< stack_frame > parent_link(void) const
void clear_variable(const std::string &name)
bool is_defined(const symbol_record &sym) const
octave_value workspace(void)
std::shared_ptr< stack_frame > m_access_link
std::string fcn_name(bool print_subfn=true) const
virtual void clear_values(void)
virtual octave_value & varref(const symbol_record &sym)=0
virtual std::size_t size(void) const
void mark_global(const symbol_record &sym)
bool is_variable(const symbol_record &sym) const
static stack_frame * create(tree_evaluator &tw, octave_function *fcn, std::size_t index, const std::shared_ptr< stack_frame > &parent_link, const std::shared_ptr< stack_frame > &static_link)
void clear(const symbol_record &sym)
std::string fcn_file_name(void) const
bool is_object(const symbol_record &sym) const
symbol_info_list glob_symbol_info(const std::string &pattern)
void install_variable(const symbol_record &sym, const octave_value &value, bool global)
std::map< std::string, octave_value > local_vars_map
virtual bool is_user_fcn_frame(void) const
virtual octave_value varval(const symbol_record &sym) const =0
virtual void accept(stack_frame_walker &sfw)=0
void display_stopped_in_message(std::ostream &os) const
void visit_compiled_fcn_stack_frame(compiled_fcn_stack_frame &frame)
void clear_symbols(stack_frame &frame, const std::list< symbol_record > &symbols)
void visit_scope_stack_frame(scope_stack_frame &frame)
symbol_cleaner(const std::string &pattern, bool have_regexp=false)
symbol_cleaner(const string_vector &patterns, bool have_regexp=false)
~symbol_cleaner(void)=default
void visit_script_stack_frame(script_stack_frame &frame)
void visit_user_fcn_stack_frame(user_fcn_stack_frame &frame)
symbol_cleaner(const symbol_cleaner &)=delete
void maybe_clear_symbol(stack_frame &frame, const symbol_record &sym)
void clean_frame(stack_frame &frame)
symbol_cleaner(bool clear_all_names=true, bool clear_objects=false)
symbol_cleaner & operator=(const symbol_cleaner &)=delete
std::set< std::string > m_cleared_names
bool is_empty(void) const
symbol_info_list symbol_info(void) const
void visit_user_fcn_stack_frame(user_fcn_stack_frame &frame)
void visit_compiled_fcn_stack_frame(compiled_fcn_stack_frame &frame)
std::list< std::pair< std::string, symbol_info_list > > m_sym_inf_list
~symbol_info_accumulator(void)=default
symbol_info_accumulator(const symbol_info_accumulator &)=delete
octave_map map_value(void) const
void append_list(stack_frame &frame)
symbol_info_accumulator(const string_vector &patterns, bool have_regexp=false)
symbol_info_accumulator & operator=(const symbol_info_accumulator &)=delete
void visit_scope_stack_frame(scope_stack_frame &frame)
std::set< std::string > m_found_names
void visit_script_stack_frame(script_stack_frame &frame)
std::list< symbol_record > filter(stack_frame &frame, const std::list< symbol_record > &symbols)
void display(std::ostream &os, const std::string &format) const
symbol_info_accumulator(const std::string &pattern, bool have_regexp=false)
symbol_info_accumulator(bool match_all=true, bool first_only=true)
std::pair< std::string, symbol_info_list > syminf_list_elt
std::list< std::string > names(void) const
octave_map map_value(const std::string &caller_function_name, int nesting_level) const
octave_value varval(const std::string &name) const
void display(std::ostream &os, const std::string &format) const
std::list< std::string > names(void) const
symbol_record dup(void) const
std::size_t data_offset(void) const
std::size_t frame_offset(void) const
void set_frame_offset(std::size_t offset)
std::string name(void) const
std::string name(void) const
const std::map< std::string, symbol_record > & symbols(void) const
std::size_t num_symbols(void) const
symbol_record lookup_symbol(const std::string &name) const
std::shared_ptr< symbol_scope_rep > parent_scope(void) const
symbol_record find_symbol(const std::string &name)
octave_value & persistent_varref(std::size_t data_offset)
octave_value persistent_varval(std::size_t data_offset) const
symbol_record insert(const std::string &name)
std::list< symbol_record > symbol_list(void) const
bool is_nested(void) const
std::size_t nesting_depth(void) const
static std::shared_ptr< stack_frame > get_access_link(octave_user_function *fcn, const std::shared_ptr< stack_frame > &static_link)
user_fcn_stack_frame(tree_evaluator &tw, octave_user_function *fcn, std::size_t index, const std::shared_ptr< stack_frame > &parent_link, const std::shared_ptr< stack_frame > &static_link, const std::shared_ptr< stack_frame > &access_link=std::shared_ptr< stack_frame >())
unwind_protect * m_unwind_protect_frame
void mark_scope(const symbol_record &sym, scope_flags flag)
octave_user_function * m_fcn
unwind_protect * unwind_protect_frame(void)
octave_value & varref(const symbol_record &sym)
symbol_record insert_symbol(const std::string &)
user_fcn_stack_frame & operator=(const user_fcn_stack_frame &elt)=delete
user_fcn_stack_frame(void)=delete
void display(bool follow=true) const
octave_value varval(const symbol_record &sym) const
symbol_scope get_scope(void) const
bool is_user_fcn_frame(void) const
static std::size_t get_num_symbols(octave_user_function *fcn)
scope_flags scope_flag(const symbol_record &sym) const
~user_fcn_stack_frame(void)
user_fcn_stack_frame(const user_fcn_stack_frame &elt)=default
void break_closure_cycles(const std::shared_ptr< stack_frame > &frame)
octave_function * function(void) const
user_fcn_stack_frame(tree_evaluator &tw, octave_user_function *fcn, std::size_t index, const std::shared_ptr< stack_frame > &parent_link, const std::shared_ptr< stack_frame > &static_link, const local_vars_map &local_vars, const std::shared_ptr< stack_frame > &access_link=std::shared_ptr< stack_frame >())
symbol_record lookup_symbol(const std::string &name) const
void accept(stack_frame_walker &sfw)
virtual std::string type_name(void) const
std::string name(void) const
static octave_map cat(int dim, octave_idx_type n, const octave_scalar_map *map_list)
void assign(const std::string &k, const octave_value &val)
octave::symbol_scope scope(void)
std::string type_name(void) const
std::string type_name(void) const
octave_idx_type get_count(void) const
void call_object_destructor(void)
bool is_defined(void) const
std::string type_name(void) const
std::ostream & list_in_columns(std::ostream &, int width=0, const std::string &prefix="") const
octave_idx_type numel(void) const
octave_value & global_varref(const std::string &name)
octave_value global_varval(const std::string &name) const
void warning(const char *fmt,...)
void warning_with_id(const char *id, const char *fmt,...)
void error(const char *fmt,...)
#define panic_impossible()
static void display_scope(std::ostream &os, const symbol_scope &scope)
#define OCTAVE_LOCAL_BUFFER(T, buf, size)
return octave_value(v1.char_array_value() . concat(v2.char_array_value(), ra_idx),((a1.is_sq_string()||a2.is_sq_string()) ? '\'' :'"'))
std::size_t format(std::ostream &os, const char *fmt,...)