Mercurial > hg > octave-nkf
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 +++ b/libinterp/parse-tree/oct-parse.in.yy @@ -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);