From f3cbb20b2272ea5b1c9cafb16e22221aa527f952 Mon Sep 17 00:00:00 2001 From: nobu Date: Mon, 29 Oct 2007 09:42:18 +0000 Subject: * parse.y (bvar): block-local variable can shadow outer variable. [ruby-core:13036] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@13792 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 5 +++++ parse.y | 13 ++++++++++--- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 9e8be1a294..116ff36cec 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Mon Oct 29 18:42:17 2007 Nobuyoshi Nakada + + * parse.y (bvar): block-local variable can shadow outer variable. + [ruby-core:13036] + Mon Oct 29 17:58:16 2007 Nobuyoshi Nakada * string.c (rb_str_substr): perfomance improvement. [ruby-dev:31806] diff --git a/parse.y b/parse.y index 355c9afa71..f7c2bb46a2 100644 --- a/parse.y +++ b/parse.y @@ -669,7 +669,7 @@ static void ripper_compile_error(struct parser_params*, const char *fmt, ...); %type brace_block cmd_brace_block do_block lhs none fitem %type mlhs mlhs_head mlhs_basic mlhs_item mlhs_node mlhs_post mlhs_inner %type fsym variable sym symbol operation operation2 operation3 -%type cname fname op f_rest_arg f_block_arg opt_f_block_arg f_norm_arg +%type cname fname op f_rest_arg f_block_arg opt_f_block_arg f_norm_arg f_bad_arg /*%%%*/ /*% %type program reswords then do dot_or_colon @@ -3250,7 +3250,7 @@ bv_decls : bvar %*/ ; -bvar : f_norm_arg +bvar : tIDENTIFIER { /*%%%*/ new_bv($1); @@ -3258,6 +3258,10 @@ bvar : f_norm_arg $$ = $1; %*/ } + | f_bad_arg + { + $$ = 0; + } ; lambda : { @@ -4135,7 +4139,7 @@ f_args : f_arg ',' f_optarg ',' f_rest_arg opt_f_block_arg } ; -f_norm_arg : tCONSTANT +f_bad_arg : tCONSTANT { /*%%%*/ yyerror("formal argument cannot be a constant"); @@ -4171,6 +4175,9 @@ f_norm_arg : tCONSTANT $$ = dispatch1(param_error, $1); %*/ } + ; + +f_norm_arg : f_bad_arg | tIDENTIFIER { /*%%%*/ -- cgit v1.2.3