diff options
author | ko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2007-07-07 07:16:05 +0000 |
---|---|---|
committer | ko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2007-07-07 07:16:05 +0000 |
commit | 0ec2b20d2f1339ab1e4d41567f9b37d733802968 (patch) | |
tree | a3b0c71a5af92bc32654742681fcc5edc8371a94 | |
parent | 174b77b2805bca12afb67d24bfc4ce9182a8daac (diff) | |
download | ruby-0ec2b20d2f1339ab1e4d41567f9b37d733802968.tar.gz |
* parse.y: fix node construction (around f_margs).
[ruby-dev:31143]
* bootstraptest/test_block.rb: add a test for above.
* insnhelper.ci: fix indent.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@12720 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | ChangeLog | 9 | ||||
-rw-r--r-- | bootstraptest/test_block.rb | 31 | ||||
-rw-r--r-- | insnhelper.ci | 4 | ||||
-rw-r--r-- | parse.y | 8 |
4 files changed, 46 insertions, 6 deletions
@@ -1,3 +1,12 @@ +Sat Jul 7 16:12:48 2007 Koichi Sasada <ko1@atdot.net> + + * parse.y: fix node construction (around f_margs). + [ruby-dev:31143] + + * bootstraptest/test_block.rb: add a test for above. + + * insnhelper.ci: fix indent. + Sat Jul 7 15:36:50 2007 Tanaka Akira <akr@fsij.org> * lib/pp.rb (PP::PPMethods#pp_hash): sort if diff --git a/bootstraptest/test_block.rb b/bootstraptest/test_block.rb index 21d13439ad..cdfd3e4407 100644 --- a/bootstraptest/test_block.rb +++ b/bootstraptest/test_block.rb @@ -336,6 +336,36 @@ assert_equal %q{[1, nil]}, %q{ } } +# block parameter (shouldn't SEGV: [ruby-dev:31143]) +assert_equal '0', %q{ +def m() +end +m {|(v0,*,(*)),|} +m {|(*v0,(*)),|} +m {|(v0,*v1,(*)),|} +m {|((v0,*v1,v2)),|} +m {|(v0,*v1,v2),|} +m {|(v0,*v1,(v2)),|} +m {|((*),*v0,v1),|} +m {|((v0),*v1,v2),|} +m {|(v0,v1,*v2,v3),|} +m {|v0,(v1,*v2,v3),|} +m {|(v0,*v1,v2),v3,|} +m {|(v0,*v1,v2)|} +m {|(v0,*v1,v2),&v3|} +m {|(v0,*v1,v2),*|} +m {|(v0,*v1,v2),*,&v3|} +m {|*,(v0,*v1,v2)|} +m {|*,(v0,*v1,v2),&v3|} +m {|v0,*,(v1,*v2,v3)|} +m {|v0,*,(v1,*v2,v3),&v4|} +m {|(v0,*v1,v2),*,v3|} +m {|(v0,*v1,v2),*,v3,&v4|} +m {|(v0, *v1, v2)|} +m {|(*,v)|} +0 +} + # [ruby-dev:31147] assert_equal 'nil', %q{ def m @@ -343,3 +373,4 @@ assert_equal 'nil', %q{ end m{|&b| b}.inspect } + diff --git a/insnhelper.ci b/insnhelper.ci index 385a31eda9..2fe540d1cb 100644 --- a/insnhelper.ci +++ b/insnhelper.ci @@ -620,8 +620,8 @@ vm_yield_setup_args(rb_thread_t *th, rb_iseq_t *iseq, if (lambda) { /* call as method */ - return vm_callee_setup_arg(th, iseq, argc, argv, &blockptr); - } + return vm_callee_setup_arg(th, iseq, argc, argv, &blockptr); + } else { int i; const int m = iseq->argc; @@ -3003,7 +3003,7 @@ f_marg : f_norm_arg | tLPAREN f_margs rparen { /*%%%*/ - $$ = $2; + $$ = NEW_LIST($2); /*% $$ = dispatch1(mlhs_paren, $2); %*/ @@ -3013,7 +3013,7 @@ f_marg : f_norm_arg f_marg_head : f_marg { /*%%%*/ - $$ = NEW_LIST($1); + $$ = $1; /*% $$ = mlhs_add(mlhs_new(), $1); %*/ @@ -3047,7 +3047,7 @@ f_margs : f_marg_head | f_marg_head ',' tSTAR f_norm_arg ',' f_marg { /*%%%*/ - $$ = NEW_MASGN($1, NEW_POSTARG($4,$6)); + $$ = NEW_MASGN($1, NEW_POSTARG(assignable($4, 0), $6)); /*% $$ = mlhs_add_star($1, $4); %*/ @@ -3063,7 +3063,7 @@ f_margs : f_marg_head | f_marg_head ',' tSTAR ',' f_marg { /*%%%*/ - $$ = NEW_MASGN($1, NEW_POSTARG(-1,$5)); + $$ = NEW_MASGN($1, NEW_POSTARG(-1, $5)); /*% $$ = mlhs_add_star($1, $5); %*/ |