comparison libinterp/parse-tree/lex.ll @ 16194:b7ca669af528

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.
author John W. Eaton <jwe@octave.org>
date Tue, 05 Mar 2013 10:19:47 -0500
parents d7392bf42fd1
children b52d2f9294b6
comparison
equal deleted inserted replaced
16193:d7392bf42fd1 16194:b7ca669af528
1292 char *buf; 1292 char *buf;
1293 }; 1293 };
1294 1294
1295 lexical_feedback::~lexical_feedback (void) 1295 lexical_feedback::~lexical_feedback (void)
1296 { 1296 {
1297 // Clear out the stack of token info used to track line and 1297 reset_token_stack ();
1298 // column numbers.
1299
1300 while (! token_stack.empty ())
1301 {
1302 delete token_stack.top ();
1303 token_stack.pop ();
1304 }
1305 } 1298 }
1306 1299
1307 void 1300 void
1308 lexical_feedback::init (void) 1301 lexical_feedback::init (void)
1309 { 1302 {
1310 // The closest paren, brace, or bracket nesting is not an object 1303 // The closest paren, brace, or bracket nesting is not an object
1311 // index. 1304 // index.
1312 looking_at_object_index.push_front (false); 1305 looking_at_object_index.push_front (false);
1306 }
1307
1308 void
1309 lexical_feedback::reset (void)
1310 {
1311 end_of_input = false;
1312 convert_spaces_to_comma = true;
1313 do_comma_insert = false;
1314 at_beginning_of_statement = true;
1315 looking_at_anon_fcn_args = false;
1316 looking_at_return_list = false;
1317 looking_at_parameter_list = false;
1318 looking_at_decl_list = false;
1319 looking_at_initializer_expression = false;
1320 looking_at_matrix_or_assign_lhs = false;
1321 looking_for_object_index = false;
1322 looking_at_indirect_ref = false;
1323 parsing_class_method = false;
1324 maybe_classdef_get_set_method = false;
1325 parsing_classdef = false;
1326 quote_is_transpose = false;
1327 input_line_number = 1;
1328 current_input_column = 1;
1329 bracketflag = 0;
1330 braceflag = 0;
1331 looping = 0;
1332 defining_func = 0;
1333 looking_at_function_handle = 0;
1334 block_comment_nesting_level = 0;
1335
1336 looking_at_object_index.clear ();
1337 looking_at_object_index.push_front (false);
1338
1339 while (! parsed_function_name.empty ())
1340 parsed_function_name.pop ();
1341
1342 pending_local_variables.clear ();
1343
1344 nesting_level.reset ();
1345
1346 reset_token_stack ();
1347 }
1348
1349 void
1350 lexical_feedback::reset_token_stack (void)
1351 {
1352 // Clear out the stack of token info used to track line and
1353 // column numbers.
1354
1355 while (! token_stack.empty ())
1356 {
1357 delete token_stack.top ();
1358 token_stack.pop ();
1359 }
1313 } 1360 }
1314 1361
1315 void 1362 void
1316 octave_lexer::input_buffer::read (void) 1363 octave_lexer::input_buffer::read (void)
1317 { 1364 {
1405 yyrestart (stdin, scanner); 1452 yyrestart (stdin, scanner);
1406 1453
1407 // Clear the buffer for help text. 1454 // Clear the buffer for help text.
1408 while (! help_buf.empty ()) 1455 while (! help_buf.empty ())
1409 help_buf.pop (); 1456 help_buf.pop ();
1457
1458 lexical_feedback::reset ();
1410 } 1459 }
1411 1460
1412 void 1461 void
1413 octave_lexer::prep_for_script_file (void) 1462 octave_lexer::prep_for_script_file (void)
1414 { 1463 {