# HG changeset patch # User John W. Eaton # Date 1362496787 18000 # Node ID b7ca669af5281e4dd5e5972e41290cb151ae4ba3 # Parent d7392bf42fd10e1c7a840e02d766dbfd9d08fdfc reset lexical_feedback state before starting a new parse * lex.h, lex.cc (bbp_nesting_level::reset): New function. (lexical_feedback::reset, lexical_feedback::reset_token_stack): New functions. (lexical_feedback::~lexical_feedback): Call reset_token_stack to do the job. (octave_lexer::reset): Call lexical_feedback::reset. diff -r d7392bf42fd1 -r b7ca669af528 libinterp/parse-tree/lex.h --- a/libinterp/parse-tree/lex.h Tue Mar 05 10:19:38 2013 -0500 +++ b/libinterp/parse-tree/lex.h Tue Mar 05 10:19:47 2013 -0500 @@ -106,6 +106,12 @@ ~bbp_nesting_level (void) { } + void reset (void) + { + while (! context.empty ()) + context.pop (); + } + void bracket (void) { context.push (BRACKET); } bool is_bracket (void) @@ -176,7 +182,9 @@ ~lexical_feedback (void); void init (void); - + + void reset (void); + // true means that we have encountered eof on the input stream. bool end_of_input; @@ -280,6 +288,8 @@ private: + void reset_token_stack (void); + // No copying! lexical_feedback (const lexical_feedback&); diff -r d7392bf42fd1 -r b7ca669af528 libinterp/parse-tree/lex.ll --- a/libinterp/parse-tree/lex.ll Tue Mar 05 10:19:38 2013 -0500 +++ b/libinterp/parse-tree/lex.ll Tue Mar 05 10:19:47 2013 -0500 @@ -1294,6 +1294,61 @@ lexical_feedback::~lexical_feedback (void) { + reset_token_stack (); +} + +void +lexical_feedback::init (void) +{ + // The closest paren, brace, or bracket nesting is not an object + // index. + looking_at_object_index.push_front (false); +} + +void +lexical_feedback::reset (void) +{ + end_of_input = false; + convert_spaces_to_comma = true; + do_comma_insert = false; + at_beginning_of_statement = true; + looking_at_anon_fcn_args = false; + looking_at_return_list = false; + looking_at_parameter_list = false; + looking_at_decl_list = false; + looking_at_initializer_expression = false; + looking_at_matrix_or_assign_lhs = false; + 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; + input_line_number = 1; + current_input_column = 1; + bracketflag = 0; + braceflag = 0; + looping = 0; + defining_func = 0; + looking_at_function_handle = 0; + block_comment_nesting_level = 0; + + looking_at_object_index.clear (); + looking_at_object_index.push_front (false); + + while (! parsed_function_name.empty ()) + parsed_function_name.pop (); + + pending_local_variables.clear (); + + nesting_level.reset (); + + reset_token_stack (); +} + +void +lexical_feedback::reset_token_stack (void) +{ // Clear out the stack of token info used to track line and // column numbers. @@ -1305,14 +1360,6 @@ } void -lexical_feedback::init (void) -{ - // The closest paren, brace, or bracket nesting is not an object - // index. - looking_at_object_index.push_front (false); -} - -void octave_lexer::input_buffer::read (void) { buffer = get_user_input (eof); @@ -1407,6 +1454,8 @@ // Clear the buffer for help text. while (! help_buf.empty ()) help_buf.pop (); + + lexical_feedback::reset (); } void