diff options
| author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2007-10-29 09:42:18 +0000 |
|---|---|---|
| committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2007-10-29 09:42:18 +0000 |
| commit | 4a2323ed7d1526f5e28d140b199a99c272a2320a (patch) | |
| tree | 9deebe3ddac9283f93dc90e9855de48270637a18 | |
| parent | 778ba82778dff8d4e17759dbf244447cec26d51e (diff) | |
| download | ruby-4a2323ed7d1526f5e28d140b199a99c272a2320a.tar.gz ruby-4a2323ed7d1526f5e28d140b199a99c272a2320a.tar.xz ruby-4a2323ed7d1526f5e28d140b199a99c272a2320a.zip | |
* parse.y (bvar): block-local variable can shadow outer variable.
[ruby-core:13036]
git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@13792 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
| -rw-r--r-- | ChangeLog | 5 | ||||
| -rw-r--r-- | parse.y | 13 |
2 files changed, 15 insertions, 3 deletions
@@ -1,3 +1,8 @@ +Mon Oct 29 18:42:17 2007 Nobuyoshi Nakada <nobu@ruby-lang.org> + + * parse.y (bvar): block-local variable can shadow outer variable. + [ruby-core:13036] + Mon Oct 29 17:58:16 2007 Nobuyoshi Nakada <nobu@ruby-lang.org> * string.c (rb_str_substr): perfomance improvement. [ruby-dev:31806] @@ -669,7 +669,7 @@ static void ripper_compile_error(struct parser_params*, const char *fmt, ...); %type <node> brace_block cmd_brace_block do_block lhs none fitem %type <node> mlhs mlhs_head mlhs_basic mlhs_item mlhs_node mlhs_post mlhs_inner %type <id> fsym variable sym symbol operation operation2 operation3 -%type <id> cname fname op f_rest_arg f_block_arg opt_f_block_arg f_norm_arg +%type <id> cname fname op f_rest_arg f_block_arg opt_f_block_arg f_norm_arg f_bad_arg /*%%%*/ /*% %type <val> 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 { /*%%%*/ |
