# HG changeset patch # User John W. Eaton # Date 1361842012 18000 # Node ID 679a54d274d92cc1b36814579f3cbd27687bc3e3 # Parent 8d19626b38ae22de6d9a5efab3291fa20c2f66be move global parser_end_of_input variable to lexical_feedback class * lex.h, lex.ll (parser_end_of_input): Move global variable to lexical_feedback class. Change all uses. (reset_parser): Don't reset parser_end_of_input here. * oct-parse.yy (eval_string, parse_fcn_file): Add lexer_flags object to unwind_protect stack. Don't protect parser_end_of_input. diff -r 8d19626b38ae -r 679a54d274d9 libinterp/interpfcn/toplev.cc --- a/libinterp/interpfcn/toplev.cc Mon Feb 25 20:06:44 2013 -0500 +++ b/libinterp/interpfcn/toplev.cc Mon Feb 25 20:26:52 2013 -0500 @@ -632,7 +632,7 @@ command_editor::increment_current_command_number (); } } - else if (parser_end_of_input) + else if (lexer_flags.parser_end_of_input) break; } } diff -r 8d19626b38ae -r 679a54d274d9 libinterp/parse-tree/lex.h --- a/libinterp/parse-tree/lex.h Mon Feb 25 20:06:44 2013 -0500 +++ b/libinterp/parse-tree/lex.h Mon Feb 25 20:26:52 2013 -0500 @@ -71,7 +71,8 @@ looking_for_object_index (false), looking_at_indirect_ref (false), parsing_class_method (false), maybe_classdef_get_set_method (false), parsing_classdef (false), - quote_is_transpose (false), bracketflag (0), braceflag (0), + quote_is_transpose (false), parser_end_of_input (false), + bracketflag (0), braceflag (0), looping (0), defining_func (0), looking_at_function_handle (0), looking_at_object_index (), parsed_function_name (), pending_local_variables () @@ -95,6 +96,7 @@ maybe_classdef_get_set_method (lf.maybe_classdef_get_set_method), parsing_classdef (lf.parsing_classdef), quote_is_transpose (lf.quote_is_transpose), + parser_end_of_input (lf.parser_end_of_input), bracketflag (lf.bracketflag), braceflag (lf.braceflag), looping (lf.looping), @@ -124,6 +126,7 @@ maybe_classdef_get_set_method = lf.maybe_classdef_get_set_method; parsing_classdef = lf.parsing_classdef; quote_is_transpose = lf.quote_is_transpose; + parser_end_of_input = lf.parser_end_of_input; bracketflag = lf.bracketflag; braceflag = lf.braceflag; looping = lf.looping; @@ -199,6 +202,9 @@ // Return transpose or start a string? bool quote_is_transpose; + // TRUE means that we have encountered EOF on the input stream. + bool parser_end_of_input; + // Square bracket level count. int bracketflag; @@ -248,9 +254,6 @@ extern std::string grab_comment_block (stream_reader& reader, bool at_bol, bool& eof); -// TRUE means that we have encountered EOF on the input stream. -extern bool parser_end_of_input; - // Flags that need to be shared between the lexer and parser. extern lexical_feedback lexer_flags; diff -r 8d19626b38ae -r 679a54d274d9 libinterp/parse-tree/lex.ll --- a/libinterp/parse-tree/lex.ll Mon Feb 25 20:06:44 2013 -0500 +++ b/libinterp/parse-tree/lex.ll Mon Feb 25 20:26:52 2013 -0500 @@ -210,9 +210,6 @@ } \ while (0) -// TRUE means that we have encountered EOF on the input stream. -bool parser_end_of_input = false; - // The state of the lexer. lexical_feedback lexer_flags; @@ -1112,8 +1109,6 @@ // Start off on the right foot. BEGIN (INITIAL); - parser_end_of_input = false; - parser_symtab_context.clear (); // We do want a prompt by default. diff -r 8d19626b38ae -r 679a54d274d9 libinterp/parse-tree/oct-parse.yy --- a/libinterp/parse-tree/oct-parse.yy Mon Feb 25 20:06:44 2013 -0500 +++ b/libinterp/parse-tree/oct-parse.yy Mon Feb 25 20:26:52 2013 -0500 @@ -562,7 +562,7 @@ { $$ = 0; } | END_OF_INPUT { - parser_end_of_input = 1; + lexer_flags.parser_end_of_input = 1; $$ = 0; } | simple_list @@ -3517,16 +3517,17 @@ { std::string file_type; + frame.protect_var (lexer_flags); + frame.protect_var (get_input_from_eval_string); - frame.protect_var (parser_end_of_input); frame.protect_var (reading_fcn_file); frame.protect_var (reading_script_file); frame.protect_var (reading_classdef_file); frame.protect_var (Vecho_executing_commands); + lexer_flags = lexical_feedback (); get_input_from_eval_string = false; - parser_end_of_input = false; if (! force_script && looking_at_function_keyword (ffile)) { @@ -4312,10 +4313,11 @@ unwind_protect frame; + frame.protect_var (lexer_flags); + frame.protect_var (input_line_number); frame.protect_var (current_input_column); frame.protect_var (get_input_from_eval_string); - frame.protect_var (parser_end_of_input); frame.protect_var (line_editing); frame.protect_var (current_eval_string); frame.protect_var (current_function_depth); @@ -4327,10 +4329,11 @@ frame.protect_var (reading_script_file); frame.protect_var (reading_classdef_file); + lexer_flags = lexical_feedback (); + input_line_number = 1; current_input_column = 1; get_input_from_eval_string = true; - parser_end_of_input = false; line_editing = false; current_function_depth = 0; function_scopes.clear (); @@ -4427,7 +4430,7 @@ || tree_continue_command::continuing) break; } - else if (parser_end_of_input) + else if (lexer_flags.parser_end_of_input) break; } }