Mercurial > octave-nkf
diff libinterp/parse-tree/pt-arg-list.cc @ 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 | 3389152014ca |
children | 787168f5f858 |
line wrap: on
line diff
--- a/libinterp/parse-tree/pt-arg-list.cc Sat Mar 23 00:09:25 2013 +0100 +++ b/libinterp/parse-tree/pt-arg-list.cc Sat Mar 23 15:02:29 2013 -0400 @@ -283,6 +283,26 @@ return retval; } +std::list<std::string> +tree_argument_list::variable_names (void) const +{ + std::list<std::string> retval; + + for (const_iterator p = begin (); p != end (); p++) + { + tree_expression *elt = *p; + + if (elt->is_identifier ()) + { + tree_identifier *id = dynamic_cast<tree_identifier *> (elt); + + retval.push_back (id->name ()); + } + } + + return retval; +} + tree_argument_list * tree_argument_list::dup (symbol_table::scope_id scope, symbol_table::context_id context) const