summaryrefslogtreecommitdiff
path: root/parse.y
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2007-12-10 16:22:52 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2007-12-10 16:22:52 +0000
commit6bd65de203c7aaffc8d4241a771491356002ed75 (patch)
treea889c98c36fe74c6ff2b17cebd85ef31332e1370 /parse.y
parentd2e596ad04050ebfe575106ea815849aefb689b2 (diff)
* parse.y (shadowing_lvar_gen): no duplicate error for "_".
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@14186 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'parse.y')
-rw-r--r--parse.y32
1 files changed, 18 insertions, 14 deletions
diff --git a/parse.y b/parse.y
index 1d2669c453..2f3a118d10 100644
--- a/parse.y
+++ b/parse.y
@@ -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