diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2007-08-30 18:49:00 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2007-08-30 18:49:00 +0000 |
commit | 7aaf7dac8d312b6b1a27ea8240d2818c5c77ee17 (patch) | |
tree | 12e2acf0563c5b6d05ae9c9f65adafa46be6fe3a /parse.y | |
parent | 70f5d818f8f4956354221e7977bb1b8b40c00a5a (diff) |
* parse.y (assignable_gen): ignore already erred names.
* parse.y (shadowing_lvar_gen): always make new block local variable
when shadowing outer local variable. [ruby-dev:31507]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@13321 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'parse.y')
-rw-r--r-- | parse.y | 6 |
1 files changed, 4 insertions, 2 deletions
@@ -1023,7 +1023,7 @@ stmt : keyword_alias fitem {lex_state = EXPR_FNAME;} fitem | primary_value '[' opt_call_args rbracket tOP_ASGN command_call { /*%%%*/ - NODE *args = $3; + NODE *args; value_expr($6); if (!$3) $3 = NEW_ZARRAY(); @@ -6677,7 +6677,7 @@ parser_yylex(struct parser_params *parser) tokadd(c); c = nextc(); if (parser_is_identchar()) { - tokadd(c); + tokadd(c); } else { pushback(c); @@ -7253,6 +7253,7 @@ gettable_gen(struct parser_params *parser, ID id) static NODE* assignable_gen(struct parser_params *parser, ID id, NODE *val) { + if (!id) return 0; if (id == keyword_self) { yyerror("Can't change the value of self"); } @@ -7321,6 +7322,7 @@ shadowing_lvar_gen(struct parser_params *parser, ID name) } else if (dvar_defined(name) || local_id(name)) { rb_warningS("shadowing outer local variable - %s", rb_id2name(name)); + vtable_add(lvtbl->vars, name); } } else { |