diff libinterp/parse-tree/lex.ll @ 16195:b52d2f9294b6

use class for reading lexer input * input.h, input.cc (octave_base_input_reader, octave_terminal_reader, octave_file_reader, octave_eval_string_reader): New classes. (octave_gets): Now a member function of octave_base_reader. (get_user_input): Delete function. Move actions to octave_terminal_reader::get_input and octave_eval_string_reader::get_input. function. Call from octave_file_reader::get_input. Don't check whether reading an eval string. (current_eval_string, get_input_from_eval_string): Delete global variables. (get_debug_input): Check CURR_LEXER->input_from_eval_string instead of global get_input_from_eval_string variable. Don't protect get_input_from_eval_string. * lex.h (octave_lexer::input_reader): New data member. (octave_lexer::octave_lexer (void)): Initialize it. (octave_lexer::octave_lexer (const std::string&), octave_lexer::octave_lexer (FILE *)): New constructors. * lex.h, lex.cc (octave_lexer::input_buffer::fill): New function. (octave_lexer::input_buffer::read): Delete. (octave_lexer::read): Rename from octave_read. Call reader to get input, and then hand it to the input_buffer instead of asking the input buffer to read input. Change all callers. (octave_lexer::input_source, octave_lexer::input_from_eval_string): New functions. Call octave_lexer::input_from_eval_string instead of using get_input_from_eval_string. * oct-parse.in.yy (octave_parser::octave_parser (FILE *), octave_parser::octave_parser (const std::string&)): New constructors. (parse_fcn_file): Pass FILE pointer to octave_parser constructor. (eval_string): Pass string to octave_parser constructor instead of setting global current_eval_string variable.
author John W. Eaton <jwe@octave.org>
date Tue, 05 Mar 2013 10:19:51 -0500
parents b7ca669af528
children 810a71122c25
line wrap: on
line diff
--- a/libinterp/parse-tree/lex.ll	Tue Mar 05 10:19:47 2013 -0500
+++ b/libinterp/parse-tree/lex.ll	Tue Mar 05 10:19:51 2013 -0500
@@ -118,7 +118,7 @@
 #undef YY_INPUT
 #endif
 #define YY_INPUT(buf, result, max_size) \
-  result = curr_lexer->octave_read (buf, max_size)
+  result = curr_lexer->read (buf, max_size)
 
 // Try to avoid crashing out completely on fatal scanner errors.
 
@@ -1360,11 +1360,12 @@
 }
 
 void
-octave_lexer::input_buffer::read (void)
+octave_lexer::input_buffer::fill (const std::string& input, bool eof_arg)
 {
-  buffer = get_user_input (eof);
+  buffer = input;
   chars_left = buffer.length ();
   pos = buffer.c_str ();
+  eof = eof_arg;
 }
 
 int
@@ -1393,7 +1394,7 @@
         {
           // There isn't enough room to plug the newline character
           // in the buffer so arrange to have it returned on the next
-          // call to octave_read.
+          // call to octave_lexer::read.
           pos = eol;
           chars_left = 1;
         }
@@ -1447,7 +1448,7 @@
       && ! (reading_fcn_file
             || reading_classdef_file
             || reading_script_file
-            || get_input_from_eval_string
+            || input_from_eval_string ()
             || input_from_startup_file))
     yyrestart (stdin, scanner);
 
@@ -1475,12 +1476,16 @@
 }
 
 int
-octave_lexer::octave_read (char *buf, unsigned max_size)
+octave_lexer::read (char *buf, unsigned max_size)
 {
   int status = 0;
 
   if (input_buf.empty ())
-    input_buf.read ();
+    {
+      bool eof = false;
+      std::string input = input_reader.get_input (eof);
+      input_buf.fill (input, eof);
+    }
 
   if (! input_buf.empty ())
     status = input_buf.copy_chunk (buf, max_size);
@@ -1489,7 +1494,7 @@
       status = YY_NULL;
 
       if (! input_buf.at_eof ())
-        fatal_error ("octave_read () in flex scanner failed");
+        fatal_error ("octave_lexer::read () in flex scanner failed");
     }
 
   return status;