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!