[前][次][番号順一覧][スレッド一覧]

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

[前][次][番号順一覧][スレッド一覧]