Mercurial > octave
changeset 27502:f62f1170ad98
in base_reader, store reference to interpreter instead of lexer
* input.h, input.cc (base_reader::m_interpreter): New data member.
(base_reader::m_lexer): Delete.
(terminal_reader, file_reader, eval_string_reader, input_reader):
Change class constructors to accept interpreter object instead of
lexer. Change all uses.
(base_reader::octave_gets, file_reader::get_input): Access interpreter
state using stored reference to interpreter instead of global functions.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Wed, 16 Oct 2019 08:45:39 -0400 |
parents | 9d3c895cbe38 |
children | 1bc237447e56 |
files | libinterp/corefcn/input.cc libinterp/corefcn/input.h libinterp/parse-tree/lex.h |
diffstat | 3 files changed, 33 insertions(+), 57 deletions(-) [+] |
line wrap: on
line diff
--- a/libinterp/corefcn/input.cc Wed Oct 16 13:29:11 2019 +0900 +++ b/libinterp/corefcn/input.cc Wed Oct 16 08:45:39 2019 -0400 @@ -53,7 +53,6 @@ #include "input.h" #include "interpreter-private.h" #include "interpreter.h" -#include "lex.h" #include "load-path.h" #include "octave.h" #include "oct-map.h" @@ -685,13 +684,11 @@ // Process pre input event hook function prior to flushing output and // printing the prompt. - interpreter& interp = __get_interpreter__ ("base_reader::octave_gets"); - - tree_evaluator& tw = interp.get_evaluator (); + tree_evaluator& tw = m_interpreter.get_evaluator (); - event_manager& evmgr = interp.get_event_manager (); + event_manager& evmgr = m_interpreter.get_event_manager (); - if (interp.interactive ()) + if (m_interpreter.interactive ()) { if (! tw.in_debug_repl ()) evmgr.exit_debugger_event (); @@ -703,7 +700,7 @@ bool history_skip_auto_repeated_debugging_command = false; - input_system& input_sys = interp.get_input_system (); + input_system& input_sys = m_interpreter.get_input_system (); std::string ps = (m_pflag > 0) ? input_sys.PS1 () : input_sys.PS2 (); @@ -711,7 +708,7 @@ pipe_handler_error_count = 0; - output_system& output_sys = interp.get_output_system (); + output_system& output_sys = m_interpreter.get_output_system (); output_sys.reset (); @@ -724,7 +721,7 @@ if (retval != "\n" && retval.find_first_not_of (" \t\n\r") != std::string::npos) { - load_path& lp = interp.get_load_path (); + load_path& lp = m_interpreter.get_load_path (); lp.update (); @@ -762,34 +759,19 @@ // Process post input event hook function after the internal history // list has been updated. - if (interp.interactive ()) + if (m_interpreter.interactive ()) evmgr.post_input_event (); return retval; } - bool base_reader::reading_fcn_file (void) const - { - return m_lexer.m_reading_fcn_file; - } - - bool base_reader::reading_classdef_file (void) const - { - return m_lexer.m_reading_classdef_file; - } - - bool base_reader::reading_script_file (void) const - { - return m_lexer.m_reading_script_file; - } - class terminal_reader : public base_reader { public: - terminal_reader (base_lexer& lxr) - : base_reader (lxr) + terminal_reader (interpreter& interp) + : base_reader (interp) { } std::string get_input (bool& eof); @@ -808,8 +790,8 @@ { public: - file_reader (FILE *f_arg, base_lexer& lxr) - : base_reader (lxr), m_file (f_arg) { } + file_reader (interpreter& interp, FILE *f_arg) + : base_reader (interp), m_file (f_arg) { } std::string get_input (bool& eof); @@ -829,8 +811,8 @@ { public: - eval_string_reader (const std::string& str, base_lexer& lxr) - : base_reader (lxr), m_eval_string (str) + eval_string_reader (interpreter& interp, const std::string& str) + : base_reader (interp), m_eval_string (str) { } std::string get_input (bool& eof); @@ -846,16 +828,16 @@ static const std::string s_in_src; }; - input_reader::input_reader (base_lexer& lxr) - : m_rep (new terminal_reader (lxr)) + input_reader::input_reader (interpreter& interp) + : m_rep (new terminal_reader (interp)) { } - input_reader::input_reader (FILE *file, base_lexer& lxr) - : m_rep (new file_reader (file, lxr)) + input_reader::input_reader (interpreter& interp, FILE *file) + : m_rep (new file_reader (interp, file)) { } - input_reader::input_reader (const std::string& str, base_lexer& lxr) - : m_rep (new eval_string_reader (str, lxr)) + input_reader::input_reader (interpreter& interp, const std::string& str) + : m_rep (new eval_string_reader (interp, str)) { } const std::string base_reader::s_in_src ("invalid"); @@ -883,8 +865,7 @@ std::string src_str = octave_fgets (m_file, eof); - input_system& input_sys - = __get_input_system__ ("get_input"); + input_system& input_sys = m_interpreter.get_input_system (); std::string mfile_encoding = input_sys.mfile_encoding ();
--- a/libinterp/corefcn/input.h Wed Oct 16 13:29:11 2019 +0900 +++ b/libinterp/corefcn/input.h Wed Oct 16 08:45:39 2019 -0400 @@ -54,7 +54,6 @@ namespace octave { class interpreter; - class base_lexer; class input_system { @@ -198,12 +197,12 @@ friend class input_reader; - base_reader (base_lexer& lxr) - : m_count (1), m_pflag (0), m_lexer (lxr) + base_reader (interpreter& interp) + : m_interpreter (interp), m_count (1), m_pflag (0) { } base_reader (const base_reader& x) - : m_count (1), m_pflag (x.m_pflag), m_lexer (x.m_lexer) + : m_interpreter (x.m_interpreter), m_count (1), m_pflag (x.m_pflag) { } virtual ~base_reader (void) = default; @@ -229,26 +228,22 @@ std::string octave_gets (bool& eof); - virtual bool reading_fcn_file (void) const; - - virtual bool reading_classdef_file (void) const; - - virtual bool reading_script_file (void) const; - virtual bool input_from_terminal (void) const { return false; } virtual bool input_from_file (void) const { return false; } virtual bool input_from_eval_string (void) const { return false; } + protected: + + interpreter& m_interpreter; + private: refcount<octave_idx_type> m_count; int m_pflag; - base_lexer& m_lexer; - static const std::string s_in_src; }; @@ -256,11 +251,11 @@ { public: - input_reader (base_lexer& lxr); + input_reader (interpreter& interp); - input_reader (FILE *file, base_lexer& lxr); + input_reader (interpreter& interp, FILE *file); - input_reader (const std::string& str, base_lexer& lxr); + input_reader (interpreter& interp, const std::string& str); input_reader (const input_reader& ir) {
--- a/libinterp/parse-tree/lex.h Wed Oct 16 13:29:11 2019 +0900 +++ b/libinterp/parse-tree/lex.h Wed Oct 16 08:45:39 2019 -0400 @@ -775,15 +775,15 @@ public: lexer (interpreter& interp) - : base_lexer (interp), m_reader (*this) + : base_lexer (interp), m_reader (interp) { } lexer (FILE *file, interpreter& interp) - : base_lexer (interp), m_reader (file, *this) + : base_lexer (interp), m_reader (interp, file) { } lexer (const std::string& eval_string, interpreter& interp) - : base_lexer (interp), m_reader (eval_string, *this) + : base_lexer (interp), m_reader (interp, eval_string) { } // No copying!