From 6bd65de203c7aaffc8d4241a771491356002ed75 Mon Sep 17 00:00:00 2001 From: matz Date: Mon, 10 Dec 2007 16:22:52 +0000 Subject: * 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 --- parse.y | 32 ++++++++++++++++++-------------- 1 file changed, 18 insertions(+), 14 deletions(-) (limited to 'parse.y') 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 -- cgit v1.2.3