diff options
author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2007-12-10 16:22:52 +0000 |
---|---|---|
committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2007-12-10 16:22:52 +0000 |
commit | b40c614b29994fa84d6d1a6bf890a67eec061aae (patch) | |
tree | a889c98c36fe74c6ff2b17cebd85ef31332e1370 /parse.y | |
parent | 0798cf704290d3060479d531e10ec3beba45e4ab (diff) | |
download | ruby-b40c614b29994fa84d6d1a6bf890a67eec061aae.tar.gz ruby-b40c614b29994fa84d6d1a6bf890a67eec061aae.tar.xz ruby-b40c614b29994fa84d6d1a6bf890a67eec061aae.zip |
* parse.y (shadowing_lvar_gen): no duplicate error for "_".
git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@14186 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'parse.y')
-rw-r--r-- | parse.y | 32 |
1 files changed, 18 insertions, 14 deletions
@@ -7626,20 +7626,24 @@ assignable_gen(struct parser_params *parser, ID id, NODE *val) static void shadowing_lvar_gen(struct parser_params *parser, ID name) { - if (dyna_in_block()) { - if (dvar_curr(name)) { - yyerror("duplicated argument 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 { - if (local_id(name)) { - yyerror("duplicated argument name"); - } - } + static ID uscore; + + if (!uscore) uscore = rb_intern("_"); + if (uscore == name) return; + if (dyna_in_block()) { + if (dvar_curr(name)) { + yyerror("duplicated argument 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 { + if (local_id(name)) { + yyerror("duplicated argument name"); + } + } } static void |