ruby-changes:2551
From: ko1@a...
Date: 28 Nov 2007 16:32:28 +0900
Subject: [ruby-changes:2551] ko1 - Ruby:r14042 (trunk): * insnhelper.ci (vm_invoke_block): should splat args.
ko1 2007-11-28 16:31:10 +0900 (Wed, 28 Nov 2007) New Revision: 14042 Modified files: trunk/ChangeLog trunk/insnhelper.ci trunk/test/ruby/test_yield.rb Log: * insnhelper.ci (vm_invoke_block): should splat args. [ruby-dev:32392] * test/ruby/test_yield.rb: add tests for above. http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/insnhelper.ci?r1=14042&r2=14041 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ChangeLog?r1=14042&r2=14041 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/test/ruby/test_yield.rb?r1=14042&r2=14041 Index: ChangeLog =================================================================== --- ChangeLog (revision 14041) +++ ChangeLog (revision 14042) @@ -1,3 +1,10 @@ +Wed Nov 28 16:29:35 2007 Koichi Sasada <ko1@a...> + + * insnhelper.ci (vm_invoke_block): should splat args. + [ruby-dev:32392] + + * test/ruby/test_yield.rb: add tests for above. + Wed Nov 28 14:43:14 2007 Nobuyoshi Nakada <nobu@r...> * ext/extmk.rb (extract_makefile): use dldflags instead of DLDFLAGS to Index: test/ruby/test_yield.rb =================================================================== --- test/ruby/test_yield.rb (revision 14041) +++ test/ruby/test_yield.rb (revision 14042) @@ -64,6 +64,14 @@ } end + def test_with_enum + obj = Object + def obj.each + yield(*[]) + end + obj.each{|*v| assert_equal([], [], '[ruby-dev:32392]')} + obj.to_enum.each{|*v| assert_equal([], [], '[ruby-dev:32392]')} + end end require 'sentence' Index: insnhelper.ci =================================================================== --- insnhelper.ci (revision 14041) +++ insnhelper.ci (revision 14042) @@ -798,13 +798,12 @@ } iseq = block->iseq; + argc = caller_setup_args(th, GET_CFP(), flag, argc, 0, 0); + if (BUILTIN_TYPE(iseq) != T_NODE) { int opt_pc; - argc = caller_setup_args(th, GET_CFP(), flag, argc, 0, 0); - CHECK_STACK_OVERFLOW(GET_CFP(), iseq->stack_max); - DEC_SP(argc); opt_pc = vm_yield_setup_args(th, iseq, argc, GET_SP(), 0, block_proc_is_lambda(block->proc)); @@ -820,8 +819,8 @@ return Qundef; } else { - val = vm_yield_with_cfunc(th, block, block->self, num, STACK_ADDR_FROM_TOP(num)); - POPN(num); /* TODO: should put before C/yield? */ + val = vm_yield_with_cfunc(th, block, block->self, argc, STACK_ADDR_FROM_TOP(argc)); + POPN(argc); /* TODO: should put before C/yield? */ return val; } } -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml