26#if ! defined (octave_pt_eval_h)
27#define octave_pt_eval_h 1
29#include "octave-config.h"
84 OCTAVE_DEFAULT_CONSTRUCT_COPY_MOVE_DELETE (
value_stack)
86 void push (const T& val) { m_stack.
push (val); }
95 T retval = m_stack.top ();
102 return m_stack.top ();
107 return m_stack.size ();
112 return m_stack.empty ();
117 while (! m_stack.empty ())
123 std::stack<T> m_stack;
129 : m_interpreter (interp), m_parser (), m_statement_context (SC_OTHER),
130 m_lvalue_list (nullptr), m_autoload_map (), m_bp_table (*this),
131 m_call_stack (*this), m_profiler (), m_debug_frame (0),
132 m_debug_mode (false), m_quiet_breakpoint_flag (false),
133 m_debugger_stack (), m_exit_status (0), m_max_recursion_depth (256),
134 m_whos_line_format (
" %la:5; %ln:6; %cs:16:6:1; %rb:12; %lc:-1;\n"),
135 m_silent_functions (false), m_string_fill_char (
' '), m_PS4 (
"+ "),
136 m_dbstep_flag (0), m_break_on_next_stmt (false), m_echo (ECHO_OFF),
137 m_echo_state (false), m_echo_file_name (),
139 m_echo_files (), m_in_top_level_repl (false),
140 m_server_mode (false), m_in_loop_command (false),
141 m_breaking (0), m_continuing (0), m_returning (0),
142 m_indexed_object (), m_index_list (), m_index_type (),
143 m_index_position (0), m_num_indices (0)
160 bool at_top_level ()
const;
162 std::string mfilename (
const std::string& opt =
"")
const;
168 void parse_and_execute (
const std::string& input,
bool& incomplete_parse);
170 void get_line_and_eval ();
182 void eval (std::shared_ptr<tree_statement_list>& stmt_list,
186 int& parse_status,
int nargout);
188 octave_value eval_string (
const std::string& eval_str,
bool silent,
192 int& parse_status,
int nargout);
197 const std::string& catch_code,
int nargout);
200 const std::string& try_code,
int nargout);
203 const std::string& try_code,
204 const std::string& catch_code,
int nargout);
247 execute_builtin_function (
octave_builtin& builtin_function,
int nargout,
327 bool statement_printing_enabled ();
329 void reset_debug_state ();
331 void reset_debug_state (
bool mode);
333 void enter_debugger (
const std::string& prompt =
"debug> ");
335 void keyboard (
const std::string& prompt =
"debug> ");
337 void dbupdown (
int n,
bool verbose =
false);
347 Matrix ignored_fcn_outputs ()
const;
349 std::string inputname (
int n,
bool ids_only =
true)
const;
355 void install_variable (
const std::string& name,
358 octave_value global_varval (
const std::string& name)
const;
362 void global_assign (
const std::string& name,
365 octave_value top_level_varval (
const std::string& name)
const;
367 void top_level_assign (
const std::string& name,
370 bool is_variable (
const std::string& name)
const;
372 bool is_local_variable (
const std::string& name)
const;
382 bool is_global (
const std::string& name)
const;
388 void assign (
const std::string& name,
391 void assignin (
const std::string& context,
const std::string& name,
395 const std::string& context =
"",
396 bool verbose =
false,
bool require_file =
true);
401 void set_nargin (
int nargin);
402 void set_nargout (
int nargout);
406 void define_parameter_list_from_arg_vector
414 convert_return_list_to_const_vector
431 const std::shared_ptr<stack_frame>& closure_frames = std::shared_ptr<stack_frame> ());
435 const std::shared_ptr<stack_frame>& closure_frames = std::shared_ptr<stack_frame> ());
441 void pop_stack_frame ();
443 std::shared_ptr<stack_frame> pop_return_stack_frame ();
447 return m_call_stack.get_current_stack_frame ();
452 return m_call_stack.current_user_frame ();
456 int current_line ()
const;
459 int current_column ()
const;
462 int debug_user_code_line ()
const;
465 int debug_user_code_column ()
const;
467 void debug_where (std::ostream& os)
const;
469 void debug_list (std::ostream& os,
int num_lines)
const;
471 void debug_type (std::ostream& os,
int start_line,
int end_line)
const;
484 bool goto_frame (std::size_t n = 0,
bool verbose =
false);
486 void goto_caller_frame ();
488 void goto_base_frame ();
490 void restore_frame (std::size_t n);
492 std::string get_dispatch_class ()
const;
494 void set_dispatch_class (
const std::string& class_name);
496 bool is_class_method_executing (std::string& dispatch_class)
const;
498 bool is_class_constructor_executing (std::string& dispatch_class)
const;
500 std::list<std::shared_ptr<stack_frame>>
503 std::list<std::shared_ptr<stack_frame>> backtrace_frames ()
const;
505 std::list<frame_info> backtrace_info (
octave_idx_type& curr_user_frame,
506 bool print_subfn =
true)
const;
508 std::list<frame_info> backtrace_info ()
const;
511 bool print_subfn =
true)
const;
517 std::string backtrace_message ()
const;
519 void push_dummy_scope (
const std::string& name);
525 void mlock (
bool skip_first =
false)
const;
527 void munlock (
bool skip_first =
false)
const;
529 bool mislocked (
bool skip_first =
false)
const;
534 void display_call_stack ()
const;
538 void clear_objects ();
540 void clear_variable (
const std::string& name);
542 void clear_variable_pattern (
const std::string& pattern);
544 void clear_variable_regexp (
const std::string& pattern);
546 void clear_variables ();
548 void clear_global_variable (
const std::string& name);
550 void clear_global_variable_pattern (
const std::string& pattern);
552 void clear_global_variable_regexp (
const std::string& pattern);
554 void clear_global_variables ();
556 void clear_all (
bool force =
false);
558 void clear_symbol (
const std::string& name);
560 void clear_symbol_pattern (
const std::string& pattern);
562 void clear_symbol_regexp (
const std::string& pattern);
564 std::list<std::string> global_variable_names ()
const;
566 std::list<std::string> top_level_variable_names ()
const;
568 std::list<std::string> variable_names ()
const;
572 std::string current_function_name (
bool skip_first =
false)
const;
574 bool in_user_code ()
const;
586 std::string lookup_autoload (
const std::string& nm)
const;
588 std::list<std::string> autoloaded_functions ()
const;
590 std::list<std::string> reverse_lookup_autoload (
const std::string& nm)
const;
592 void add_autoload (
const std::string& fcn,
const std::string& nm);
594 void remove_autoload (
const std::string& fcn,
const std::string& nm);
600 int val = m_max_recursion_depth;
601 m_max_recursion_depth = n;
612 int val = m_silent_functions;
613 m_silent_functions = b;
623 std::string val = m_whos_line_format;
624 m_whos_line_format = s;
635 std::size_t val = m_debug_frame;
642 return m_call_stack.current_frame ();
649 bool val = m_quiet_breakpoint_flag;
650 m_quiet_breakpoint_flag = flag;
658 int val = m_string_fill_char;
659 m_string_fill_char = c;
667 bool in_debug_repl ()
const;
674 void dbquit (
bool all =
false);
680 m_debug_watch_expressions.insert (expr);
687 m_debug_watch_expressions.erase (expr);
694 m_debug_watch_expressions.clear ();
701 return m_debug_watch_expressions;
706 std::string
PS4 ()
const {
return m_PS4; }
708 std::string
PS4 (
const std::string& s)
710 std::string val = m_PS4;
715 void set_PS4 (
const std::string& s) { m_PS4 = s; }
719 return m_indexed_object;
724 m_indexed_object = obj;
733 const std::list<octave_value_list>& index_list)
735 m_index_type = index_type;
736 m_index_list = index_list;
742 m_index_list.clear ();
747 m_index_type += type;
748 m_index_list.push_back (idx);
764 return m_lvalue_list;
776 int val = m_breaking;
785 int val = m_continuing;
794 int val = m_returning;
803 int old_val = m_dbstep_flag;
812 return m_break_on_next_stmt;
817 bool old_val = m_break_on_next_stmt;
818 m_break_on_next_stmt = val;
824 m_break_on_next_stmt = val;
829 int echo ()
const {
return m_echo; }
833 int old_val = m_echo;
845 bool return_list,
bool verbose =
false);
852 void push_echo_state (
int type,
const std::string& file_name,
int pos = 1);
860 m_echo_file_pos = pos;
865 template <
typename T>
866 void execute_range_loop (
const range<T>& rng,
int line,
870 void set_echo_state (
int type,
const std::string& file_name,
int pos);
872 void maybe_set_echo_state ();
876 bool maybe_push_echo_state_cleanup ();
880 void do_breakpoint (
bool is_breakpoint,
881 bool is_end_of_fcn_or_script =
false);
886 void uwp_set_echo_state (
bool state,
const std::string& file_name,
int pos);
888 bool echo_this_file (
const std::string& file,
int type)
const;
890 void echo_code (
int line);
892 bool quit_loop_now ();
895 const Matrix& ignored_outputs,
int nargin,
896 int nargout,
bool takes_varargs,
899 std::string check_autoload_file (
const std::string& nm)
const;
903 std::shared_ptr<push_parser> m_parser;
906 stmt_list_type m_statement_context;
908 const std::list<octave_lvalue> *m_lvalue_list;
911 std::map<std::string, std::string> m_autoload_map;
920 std::size_t m_debug_frame;
924 bool m_quiet_breakpoint_flag;
931 std::stack<debugger *> m_debugger_stack;
933 std::set<std::string> m_debug_watch_expressions;
939 int m_max_recursion_depth;
942 std::string m_whos_line_format;
946 bool m_silent_functions;
949 char m_string_fill_char;
962 bool m_break_on_next_stmt;
976 std::string m_echo_file_name;
988 std::map<std::string, bool> m_echo_files;
991 bool m_in_top_level_repl;
997 bool m_in_loop_command;
1011 std::list<octave_value_list> m_index_list;
1012 std::string m_index_type;
1013 int m_index_position;
1017OCTAVE_END_NAMESPACE(octave)
std::map< std::string, octave_value > local_vars_map
void set_indexed_object(const octave_value &obj=octave_value())
int max_recursion_depth() const
interpreter & get_interpreter()
std::size_t debug_frame(std::size_t n)
int max_recursion_depth(int n)
const std::list< octave_lvalue > * lvalue_list() const
void set_PS4(const std::string &s)
void set_echo_file_pos(int pos)
bool break_on_next_statement() const
char string_fill_char(char c)
std::string whos_line_format(const std::string &s)
profiler & get_profiler()
bool silent_functions(bool b)
bool in_top_level_repl() const
int index_position() const
void remove_debug_watch_expression(const std::string &expr)
const std::list< octave_value_list > & index_list() const
bool quiet_breakpoint_flag(bool flag)
octave_value indexed_object() const
bp_table & get_bp_table()
std::shared_ptr< push_parser > get_parser()
void set_break_on_next_statement(bool val)
std::size_t current_call_stack_frame_number() const
std::size_t debug_frame() const
void add_debug_watch_expression(const std::string &expr)
tree_evaluator(interpreter &interp)
void set_parser(const std::shared_ptr< push_parser > &parser)
bool silent_functions() const
void server_mode(bool arg)
char string_fill_char() const
std::shared_ptr< stack_frame > current_user_frame() const
std::string whos_line_format() const
std::string PS4(const std::string &s)
const std::string & index_type() const
bool break_on_next_statement(bool val)
~tree_evaluator()=default
std::set< std::string > debug_watch_expressions() const
bool quiet_breakpoint_flag() const
void set_lvalue_list(const std::list< octave_lvalue > *lst)
void set_dbstep_flag(int step)
void clear_debug_watch_expressions()
void append_index_list(char type, const octave_value_list &idx)
std::shared_ptr< stack_frame > get_current_stack_frame() const
void set_index_list(const std::string &index_type, const std::list< octave_value_list > &index_list)
virtual void visit_compound_binary_expression(tree_compound_binary_expression &)
virtual void visit_boolean_expression(tree_boolean_expression &)
virtual void visit_unwind_protect_command(tree_unwind_protect_command &)
virtual void visit_try_catch_command(tree_try_catch_command &)
virtual void visit_if_command_list(tree_if_command_list &)
virtual void visit_multi_assignment(tree_multi_assignment &)
virtual void visit_return_command(tree_return_command &)
virtual void visit_continue_command(tree_continue_command &)
virtual void visit_switch_case_list(tree_switch_case_list &)
virtual void visit_complex_for_command(tree_complex_for_command &)
virtual void visit_break_command(tree_break_command &)
virtual void visit_matrix(tree_matrix &)
virtual void visit_args_block_validation_list(tree_args_block_validation_list &)
virtual void visit_fcn_handle(tree_fcn_handle &)
virtual void visit_colon_expression(tree_colon_expression &)
virtual void visit_arg_size_spec(tree_arg_size_spec &)
virtual void visit_spmd_command(tree_spmd_command &)
virtual void visit_do_until_command(tree_do_until_command &)
virtual void visit_no_op_command(tree_no_op_command &)
virtual void visit_binary_expression(tree_binary_expression &)
virtual void visit_simple_for_command(tree_simple_for_command &)
virtual void visit_postfix_expression(tree_postfix_expression &)
virtual void visit_prefix_expression(tree_prefix_expression &)
virtual void visit_anon_fcn_handle(tree_anon_fcn_handle &)
virtual void visit_args_block_attribute_list(tree_args_block_attribute_list &)
virtual void visit_parameter_list(tree_parameter_list &)
virtual void visit_arguments_block(tree_arguments_block &)
virtual void visit_statement(tree_statement &)
virtual void visit_index_expression(tree_index_expression &)
virtual void visit_decl_command(tree_decl_command &)
virtual void visit_switch_case(tree_switch_case &)
virtual void visit_cell(tree_cell &)
virtual void visit_identifier(tree_identifier &)
virtual void visit_if_clause(tree_if_clause &)
virtual void visit_statement_list(tree_statement_list &)
virtual void visit_arg_validation_fcns(tree_arg_validation_fcns &)
virtual void visit_if_command(tree_if_command &)
virtual void visit_argument_list(tree_argument_list &)
virtual void visit_decl_elt(tree_decl_elt &)
virtual void visit_constant(tree_constant &)
virtual void visit_simple_assignment(tree_simple_assignment &)
virtual void visit_superclass_ref(tree_superclass_ref &)
virtual void visit_octave_user_script(octave_user_script &)
virtual void visit_arg_validation(tree_arg_validation &)
virtual void visit_octave_user_function(octave_user_function &)
virtual void visit_function_def(tree_function_def &)
virtual void visit_metaclass_query(tree_metaclass_query &)
virtual void visit_while_command(tree_while_command &)
virtual void visit_switch_command(tree_switch_command &)
OCTAVE_BEGIN_NAMESPACE(octave) static octave_value daspk_fcn
void source_file(const std::string &file_name, const std::string &context, bool verbose, bool require_file)