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