Mercurial > octave
diff libinterp/corefcn/stack-frame.cc @ 27211:8c27802a76c4
store reference to evaluator instead of call stack in stack frame
* pt-eval.h, pt-eval.cc (tree_evaluator::max_stack_depth,
tree_evaluator::global_varref, tree_evaluator::display_call_stack):
New functions.
* call-stack.cc (display_call_stack): Delete.
(call_stack::push): Use evaluator instead of call_stack to create
stack_frame object.
(Fmax_stack_depth): Eliminate direct access of call stack.
* stack-frame.h, stack-frame.cc (stack_frame::install_variable,
script_stack_frame::varval, script_stack_frame::varref,
user_fcn_stack_frame::varval, usr_fcn_stack_frame::varref,
scope_stack_frame::varval, scope_stack_frame::varref): Access global
values through evaluator to eliminate direct access to call stack.
(stack_frame::m_call_stack): Delete.
(stack_frame::m_evaluator): New member variable. Update constructors.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Tue, 02 Apr 2019 11:51:24 +0000 |
parents | 61226b7bd6b9 |
children | b442ec6dda5c |
line wrap: on
line diff
--- a/libinterp/corefcn/stack-frame.cc Mon Apr 01 21:33:22 2019 +0000 +++ b/libinterp/corefcn/stack-frame.cc Tue Apr 02 11:51:24 2019 +0000 @@ -27,7 +27,6 @@ #include "lo-regexp.h" #include "str-vec.h" -#include "call-stack.h" #include "defun.h" #include "interpreter.h" #include "interpreter-private.h" @@ -38,6 +37,7 @@ #include "ov-usr-fcn.h" #include "pager.h" #include "parse.h" +#include "pt-eval.h" #include "stack-frame.h" #include "stack-frame-walker.h" #include "syminfo.h" @@ -386,7 +386,7 @@ // global scope, then use the local value as the // initial value. This value will also override any // initializer in the global statement. - octave_value global_val = m_call_stack.global_varval (nm); + octave_value global_val = m_evaluator.global_varval (nm); if (global_val.is_defined ()) { @@ -400,7 +400,7 @@ warning_with_id ("Octave:global-local-conflict", "global: existing local value used to initialize global variable"); - m_call_stack.global_varref (nm) = val; + m_evaluator.global_varref (nm) = val; } } @@ -556,12 +556,12 @@ sfw.visit_compiled_fcn_stack_frame (*this); } - script_stack_frame::script_stack_frame (call_stack& cs, + script_stack_frame::script_stack_frame (tree_evaluator& tw, octave_user_script *script, unwind_protect *up_frame, size_t index, stack_frame *static_link) - : stack_frame (cs, index, static_link, get_access_link (static_link)), + : stack_frame (tw, index, static_link, get_access_link (static_link)), m_script (script), m_unwind_protect_frame (up_frame), m_lexical_frame_offsets (get_num_symbols (script), 1), m_value_offsets (get_num_symbols (script), 0) @@ -1034,7 +1034,7 @@ } case GLOBAL: - return m_call_stack.global_varval (sym.name ()); + return m_evaluator.global_varval (sym.name ()); } error ("internal error: invalid switch case"); @@ -1070,7 +1070,7 @@ } case GLOBAL: - return m_call_stack.global_varref (sym.name ()); + return m_evaluator.global_varref (sym.name ()); } error ("internal error: invalid switch case"); @@ -1351,7 +1351,7 @@ } case GLOBAL: - return m_call_stack.global_varval (sym.name ()); + return m_evaluator.global_varval (sym.name ()); } error ("internal error: invalid switch case"); @@ -1386,7 +1386,7 @@ } case GLOBAL: - return m_call_stack.global_varref (sym.name ()); + return m_evaluator.global_varref (sym.name ()); } error ("internal error: invalid switch case"); @@ -1484,7 +1484,7 @@ return m_scope.persistent_varval (data_offset); case GLOBAL: - return m_call_stack.global_varval (sym.name ()); + return m_evaluator.global_varval (sym.name ()); } error ("internal error: invalid switch case"); @@ -1509,7 +1509,7 @@ return m_scope.persistent_varref (data_offset); case GLOBAL: - return m_call_stack.global_varref (sym.name ()); + return m_evaluator.global_varref (sym.name ()); } error ("internal error: invalid switch case");