changeset 27526:cb964b74d8a0

Backed out changeset 28ed77ca1e4a
author John W. Eaton <jwe@octave.org>
date Fri, 18 Oct 2019 07:41:02 -0400
parents 09175c0e417d
children 73be3c628eac
files libinterp/corefcn/interpreter.cc libinterp/parse-tree/lex.h libinterp/parse-tree/lex.ll libinterp/parse-tree/parse.h
diffstat 4 files changed, 54 insertions(+), 69 deletions(-) [+]
line wrap: on
line diff
--- a/libinterp/corefcn/interpreter.cc	Sun Oct 20 08:55:16 2019 -0700
+++ b/libinterp/corefcn/interpreter.cc	Fri Oct 18 07:41:02 2019 -0400
@@ -999,7 +999,7 @@
     // be adjusted automatically when we are parsing multi-line
     // commands.
 
-    push_parser repl_parser (*this, &reader);
+    push_parser repl_parser (*this);
 
 #else
 
--- a/libinterp/parse-tree/lex.h	Sun Oct 20 08:55:16 2019 -0700
+++ b/libinterp/parse-tree/lex.h	Fri Oct 18 07:41:02 2019 -0400
@@ -597,9 +597,9 @@
       comment_list *m_comment_list;
     };
 
-    base_lexer (interpreter& interp, input_reader *reader = nullptr)
-      : lexical_feedback (interp), m_pflag (1), m_reader (reader),
-        m_scanner (nullptr), m_input_buf (), m_comment_buf ()
+    base_lexer (interpreter& interp)
+      : lexical_feedback (interp), m_scanner (nullptr), m_input_buf (),
+        m_comment_buf ()
     {
       init ();
     }
@@ -700,13 +700,6 @@
 
     void lexer_debug (const char *pattern);
 
-    // Manage promptflag info locally if no input reader object is
-    // associated with this lexer.
-    int m_pflag;
-
-    // Allows the reader prompt level to be managed automatically.
-    input_reader *m_reader;
-
     // Internal state of the flex-generated lexer.
     void *m_scanner;
 
@@ -716,38 +709,13 @@
     // Object that collects comment text.
     comment_buffer m_comment_buf;
 
-    void increment_promptflag (void)
-    {
-      if (m_reader)
-        m_reader->increment_promptflag ();
-      else
-        m_pflag++;
-    }
+    virtual void increment_promptflag (void) = 0;
 
-    void decrement_promptflag (void)
-    {
-      if (m_reader)
-        m_reader->decrement_promptflag ();
-      else
-        m_pflag--;
-    }
+    virtual void decrement_promptflag (void) = 0;
 
-    int promptflag (void) const
-    {
-      return m_reader ? m_reader->promptflag () : m_pflag;
-    }
+    virtual int promptflag (void) const = 0;
 
-    int promptflag (int n)
-    {
-      if (m_reader)
-        return m_reader->promptflag (n);
-      else
-        {
-          int retval = m_pflag;
-          m_pflag = n;
-          return retval;
-        }
-    }
+    virtual int promptflag (int) = 0;
 
     virtual std::string input_source (void) const { return "unknown"; }
 
@@ -807,15 +775,15 @@
   public:
 
     lexer (interpreter& interp)
-      : base_lexer (interp, new input_reader (interp))
+      : base_lexer (interp), m_reader (interp)
     { }
 
     lexer (FILE *file, interpreter& interp)
-      : base_lexer (interp, new input_reader (interp, file))
+      : base_lexer (interp), m_reader (interp, file)
     { }
 
     lexer (const std::string& eval_string, interpreter& interp)
-      : base_lexer (interp, new input_reader (interp, eval_string))
+      : base_lexer (interp), m_reader (interp, eval_string)
     { }
 
     // No copying!
@@ -826,32 +794,42 @@
 
     void reset (void)
     {
-      m_reader->reset ();
+      m_reader.reset ();
 
       base_lexer::reset ();
     }
 
+    void increment_promptflag (void) { m_reader.increment_promptflag (); }
+
+    void decrement_promptflag (void) { m_reader.decrement_promptflag (); }
+
+    int promptflag (void) const { return m_reader.promptflag (); }
+
+    int promptflag (int n) { return m_reader.promptflag (n); }
+
     std::string input_source (void) const
     {
-      return m_reader->input_source ();
+      return m_reader.input_source ();
     }
 
     bool input_from_terminal (void) const
     {
-      return m_reader->input_from_terminal ();
+      return m_reader.input_from_terminal ();
     }
 
     bool input_from_file (void) const
     {
-      return m_reader->input_from_file ();
+      return m_reader.input_from_file ();
     }
 
     bool input_from_eval_string (void) const
     {
-      return m_reader->input_from_eval_string ();
+      return m_reader.input_from_eval_string ();
     }
 
     int fill_flex_buffer (char *buf, unsigned int max_size);
+
+    input_reader m_reader;
   };
 
   class
@@ -859,32 +837,26 @@
   {
   public:
 
-    // Allow the input_reader object to be attached to the lexer so that
-    // the prompt flag can be adjusted automatically when we are parsing
-    // multi-line commands.
-
-    push_lexer (interpreter& interp, input_reader *reader = nullptr)
-      : base_lexer (interp, reader)
+    push_lexer (interpreter& interp)
+      : base_lexer (interp), m_pflag (1)
     {
       append_input ("", false);
     }
 
-    push_lexer (const std::string& input, interpreter& interp,
-                input_reader *reader = nullptr)
-      : base_lexer (interp, reader)
+    push_lexer (const std::string& input, interpreter& interp)
+      : base_lexer (interp), m_pflag (1)
     {
       append_input (input, false);
     }
 
-    push_lexer (bool eof, interpreter& interp, input_reader *reader = nullptr)
-      : base_lexer (interp, reader)
+    push_lexer (bool eof, interpreter& interp)
+      : base_lexer (interp), m_pflag (1)
     {
       append_input ("", eof);
     }
 
-    push_lexer (const std::string& input, bool eof, interpreter& interp,
-                input_reader *reader = nullptr)
-      : base_lexer (interp, reader)
+    push_lexer (const std::string& input, bool eof, interpreter& interp)
+      : base_lexer (interp), m_pflag (1)
     {
       append_input (input, eof);
     }
@@ -906,9 +878,26 @@
 
     void append_input (const std::string& input, bool eof);
 
+    void increment_promptflag (void) { m_pflag++; }
+
+    void decrement_promptflag (void) { m_pflag--; }
+
+    int promptflag (void) const { return m_pflag; }
+
+    int promptflag (int n)
+    {
+      int retval = m_pflag;
+      m_pflag = n;
+      return retval;
+    }
+
     std::string input_source (void) const { return "push buffer"; }
 
     int fill_flex_buffer (char *buf, unsigned int max_size);
+
+  protected:
+
+    int m_pflag;
   };
 }
 
--- a/libinterp/parse-tree/lex.ll	Sun Oct 20 08:55:16 2019 -0700
+++ b/libinterp/parse-tree/lex.ll	Fri Oct 18 07:41:02 2019 -0400
@@ -3712,7 +3712,7 @@
     if (m_input_buf.empty ())
       {
         bool eof = false;
-        m_current_input_line = m_reader->get_input (eof);
+        m_current_input_line = m_reader.get_input (eof);
 
         m_input_buf.fill (m_current_input_line, eof);
 
--- a/libinterp/parse-tree/parse.h	Sun Oct 20 08:55:16 2019 -0700
+++ b/libinterp/parse-tree/parse.h	Fri Oct 18 07:41:02 2019 -0400
@@ -589,12 +589,8 @@
   {
   public:
 
-    // Allow the input_reader object to be attached to the lexer so that
-    // the prompt flag can be adjusted automatically when we are parsing
-    // multi-line commands.
-
-    push_parser (interpreter& interp, input_reader *reader = nullptr)
-      : base_parser (*(new push_lexer (interp, reader)))
+    push_parser (interpreter& interp)
+      : base_parser (*(new push_lexer (interp)))
     { }
 
     // No copying!