Mercurial > hg > octave-nkf
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 +++ b/libinterp/parse-tree/lex.ll @@ -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;