summaryrefslogtreecommitdiffstats
path: root/parse.y
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2007-08-30 18:49:00 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2007-08-30 18:49:00 +0000
commit7a9a5fd55866f8e80b4510e51c9b13da88330a31 (patch)
tree12e2acf0563c5b6d05ae9c9f65adafa46be6fe3a /parse.y
parentd7c0f0408a90154ed59f0aba487cc9201f906f2c (diff)
downloadruby-7a9a5fd55866f8e80b4510e51c9b13da88330a31.tar.gz
ruby-7a9a5fd55866f8e80b4510e51c9b13da88330a31.tar.xz
ruby-7a9a5fd55866f8e80b4510e51c9b13da88330a31.zip
* 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: http://svn.ruby-lang.org/repos/ruby/trunk@13321 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'parse.y')
-rw-r--r--parse.y6
1 files changed, 4 insertions, 2 deletions
diff --git a/parse.y b/parse.y
index 08c4268e2..e1f74a1f9 100644
--- a/parse.y
+++ b/parse.y
@@ -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 {