From 0ec2b20d2f1339ab1e4d41567f9b37d733802968 Mon Sep 17 00:00:00 2001 From: ko1 Date: Sat, 7 Jul 2007 07:16:05 +0000 Subject: * 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 --- ChangeLog | 9 +++++++++ bootstraptest/test_block.rb | 31 +++++++++++++++++++++++++++++++ insnhelper.ci | 4 ++-- parse.y | 8 ++++---- 4 files changed, 46 insertions(+), 6 deletions(-) diff --git a/ChangeLog b/ChangeLog index 7a86b717bd..33f4a49739 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +Sat Jul 7 16:12:48 2007 Koichi Sasada + + * 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 * 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; diff --git a/parse.y b/parse.y index d24cf06157..bb39af8e30 100644 --- a/parse.y +++ b/parse.y @@ -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); %*/ -- cgit v1.2.3