diff libinterp/parse-tree/oct-parse.in.yy @ 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 490625211945
children 2c5c538be353
line wrap: on
line diff
--- a/libinterp/parse-tree/oct-parse.in.yy	Tue Mar 05 10:19:47 2013 -0500
+++ b/libinterp/parse-tree/oct-parse.in.yy	Tue Mar 05 10:19:51 2013 -0500
@@ -136,7 +136,7 @@
       if (! parser_symtab_context.empty ()) \
         parser_symtab_context.pop (); \
       if ((interactive || forced_interactive)   \
-          && ! get_input_from_eval_string)      \
+          && ! (curr_lexer)->input_from_eval_string ()) \
         YYACCEPT; \
       else \
         YYABORT; \
@@ -1237,7 +1237,7 @@
                       }
 
                     if (! (reading_fcn_file || reading_script_file
-                           || get_input_from_eval_string))
+                           || (curr_lexer)->input_from_eval_string ()))
                       {
                         curr_parser.bison_error ("function body open at end of input");
                         YYABORT;
@@ -3399,7 +3399,7 @@
       // octave_parser constructor sets this for us.
       frame.protect_var (CURR_LEXER);
 
-      octave_parser curr_parser;
+      octave_parser curr_parser (ffile);
 
       curr_parser.curr_class_name = dispatch_type;
       curr_parser.autoloading = autoload;
@@ -3418,14 +3418,11 @@
         {
           std::string file_type;
 
-          frame.protect_var (get_input_from_eval_string);
           frame.protect_var (reading_fcn_file);
           frame.protect_var (reading_script_file);
           frame.protect_var (reading_classdef_file);
           frame.protect_var (Vecho_executing_commands);
 
-          get_input_from_eval_string = false;
-
           if (! force_script && looking_at_function_keyword (ffile))
             {
               file_type = "function";
@@ -4181,7 +4178,8 @@
 }
 
 octave_value_list
-eval_string (const std::string& s, bool silent, int& parse_status, int nargout)
+eval_string (const std::string& eval_str, bool silent,
+             int& parse_status, int nargout)
 {
   octave_value_list retval;
 
@@ -4190,23 +4188,18 @@
   // octave_parser constructor sets this for us.
   frame.protect_var (CURR_LEXER);
 
-  octave_parser curr_parser;
-
-  frame.protect_var (get_input_from_eval_string);
+  octave_parser curr_parser (eval_str);
+
   frame.protect_var (line_editing);
-  frame.protect_var (current_eval_string);
   frame.protect_var (reading_fcn_file);
   frame.protect_var (reading_script_file);
   frame.protect_var (reading_classdef_file);
 
-  get_input_from_eval_string = true;
   line_editing = false;
   reading_fcn_file = false;
   reading_script_file = false;
   reading_classdef_file = false;
 
-  current_eval_string = s;
-
   do
     {
       curr_parser.reset ();
@@ -4278,11 +4271,11 @@
 }
 
 octave_value
-eval_string (const std::string& s, bool silent, int& parse_status)
+eval_string (const std::string& eval_str, bool silent, int& parse_status)
 {
   octave_value retval;
 
-  octave_value_list tmp = eval_string (s, silent, parse_status, 1);
+  octave_value_list tmp = eval_string (eval_str, silent, parse_status, 1);
 
   if (! tmp.empty ())
     retval = tmp(0);