Mercurial > hg > octave-nkf
diff libinterp/parse-tree/oct-parse.in.yy @ 16360:11115c237231
recognize variables when parsing (bug #38576)
* lex.h, lex.ll (lexical_feedback::mark_as_variable,
lexical_feedback::maybe_mark_previous_token_as_variable,
lexical_feedback::mark_as_variables, octave_lexer::is_variable):
New fucntions.
("="): Call maybe_mark_previous_toke_as_variable.
(handle_identifier): Don't tag variables as possible commands.
(param_list): Mark names in list as variables.
(octave_base_parser::validate_matrix_for_assignment): Likewise.
* pt-arg-list.h, pt-arg-list.cc (tree_argument_list::variable_names):
New function.
* pt-misc.h, pt-misc.cc (tree_parameter_list::variable_names):
New function.
* token.h, token.cc (token::symbol_name, token::is_symbol):
New functions.
* test/bug-38576.tst: New file.
* test/Makefile.am (FCN_FILES): Add bug-38576.tst to the list.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Sat, 23 Mar 2013 15:02:29 -0400 |
parents | 09f0cb9cac7d |
children | 302157614308 |
line wrap: on
line diff
--- a/libinterp/parse-tree/oct-parse.in.yy +++ b/libinterp/parse-tree/oct-parse.in.yy @@ -1036,7 +1036,12 @@ ; param_list : param_list_beg param_list1 param_list_end - { $$ = $2; } + { + if ($2) + lexer.mark_as_variables ($2->variable_names ()); + + $$ = $2; + } | param_list_beg error { parser.bison_error ("invalid parameter list"); @@ -1051,7 +1056,10 @@ { $1->mark_as_formal_parameters (); if ($1->validate (tree_parameter_list::in)) - $$ = $1; + { + lexer.mark_as_variables ($1->variable_names ()); + $$ = $1; + } else ABORT_PARSE; } @@ -2969,7 +2977,10 @@ tmp = new tree_argument_list (e); if (tmp && tmp->is_valid_lvalue_list ()) - retval = tmp; + { + lexer.mark_as_variables (tmp->variable_names ()); + retval = tmp; + } else { bison_error ("invalid left hand side of assignment");