diff libinterp/corefcn/input.h @ 17731:f79bf671a493

eliminate global LEXER variable * input.h, input.cc (octave_base_reader::lexer): New member variable. (octave_base_reader::octave_base_reader): Initialize lexer. (octave_base_reader::octave_base_reader (const octave_base_reader&)): Also copy pflag and lexer. (octave_base_reader::reading_fcn_file, octave_base_reader::reading_classdef_file, octave_base_reader::reading_script_file): New functions. (octave_base_reader::do_input_echo): Call reading_script file instead of using global LEXER variable. (get_user_input): Don't user global LEXER variable. Only check interactive and forced_interactive to decide whether to temporarily set forced_interactive to true. (octave_terminal_reader::octave_terminal_reader, octave_file_reader::octave_file_reader, octave_eval_string_reader::octave_eval_string_reader, octave_input_reader::octave_input_reader): New optional arg, lexer. * toplev.cc (main_loop): Don't user global LEXER variable. Eliminate unused unwind_protect frame. * lex.h, lex.ll (octave_base_lexer::cleanup): Delete unused function. (octave_lexer::octave_lexer): Pass this to input_reader initializer. * parse.h, oct-parse.in.yy (octave_base_parser::init): Delete unneded function. (octave_base_parser::octave_base_parser, octave_push_parser::init, octave_push_parser::octave_push_parser): Don't call octave_base_parser::init. (eval_string): Don't use global LEXER variable. Eliminate unused unwind_protect frame.
author John W. Eaton <jwe@octave.org>
date Tue, 22 Oct 2013 18:43:36 -0400
parents 68fc671a9339
children 8ad59bef27b5
line wrap: on
line diff
--- a/libinterp/corefcn/input.h
+++ b/libinterp/corefcn/input.h
@@ -34,6 +34,7 @@
 #include "pager.h"
 
 class octave_value;
+class octave_base_lexer;
 
 extern OCTINTERP_API FILE *get_input_from_stdin (void);
 
@@ -86,9 +87,13 @@
 
   friend class octave_input_reader;
 
-  octave_base_reader (void) : count (1), pflag (0) { }
+  octave_base_reader (octave_base_lexer *lxr)
+    : count (1), pflag (0), lexer (lxr)
+  { }
 
-  octave_base_reader (const octave_base_reader&) : count (1) { }
+  octave_base_reader (const octave_base_reader& x)
+    : count (1), pflag (x.pflag), lexer (x.lexer)
+  { }
 
   virtual ~octave_base_reader (void) { }
 
@@ -113,12 +118,20 @@
 
   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;
+
 private:
 
   int count;
 
   int pflag;
 
+  octave_base_lexer *lexer;
+
   void do_input_echo (const std::string&) const;
 
   static const std::string in_src;
@@ -129,7 +142,9 @@
 {
 public:
 
-  octave_terminal_reader (void) : octave_base_reader () { }
+  octave_terminal_reader (octave_base_lexer *lxr = 0)
+    : octave_base_reader (lxr)
+  { }
 
   std::string get_input (bool& eof);
 
@@ -145,8 +160,8 @@
 {
 public:
 
-  octave_file_reader (FILE *f_arg)
-    : octave_base_reader (), file (f_arg) { }
+  octave_file_reader (FILE *f_arg, octave_base_lexer *lxr = 0)
+    : octave_base_reader (lxr), file (f_arg) { }
 
   std::string get_input (bool& eof);
 
@@ -164,8 +179,9 @@
 {
 public:
 
-  octave_eval_string_reader (const std::string& str)
-    : octave_base_reader (), eval_string (str)
+  octave_eval_string_reader (const std::string& str,
+                             octave_base_lexer *lxr = 0)
+    : octave_base_reader (lxr), eval_string (str)
   { }
 
   std::string get_input (bool& eof);
@@ -183,16 +199,16 @@
 octave_input_reader
 {
 public:
-  octave_input_reader (void)
-    : rep (new octave_terminal_reader ())
+  octave_input_reader (octave_base_lexer *lxr = 0)
+    : rep (new octave_terminal_reader (lxr))
   { }
 
-  octave_input_reader (FILE *file)
-    : rep (new octave_file_reader (file))
+  octave_input_reader (FILE *file, octave_base_lexer *lxr = 0)
+    : rep (new octave_file_reader (file, lxr))
   { }
 
-  octave_input_reader (const std::string& str)
-    : rep (new octave_eval_string_reader (str))
+  octave_input_reader (const std::string& str, octave_base_lexer *lxr = 0)
+    : rep (new octave_eval_string_reader (str, lxr))
   { }
 
   octave_input_reader (const octave_input_reader& ir)