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

ruby-changes:2828

From: ko1@a...
Date: 19 Dec 2007 15:38:02 +0900
Subject: [ruby-changes:2828] matz - Ruby:r14319 (trunk): * insnhelper.ci (vm_yield_with_cfunc): call cfunc with

matz	2007-12-19 15:37:41 +0900 (Wed, 19 Dec 2007)

  New Revision: 14319

  Modified files:
    trunk/ChangeLog
    trunk/enumerator.c
    trunk/insnhelper.ci

  Log:
    * insnhelper.ci (vm_yield_with_cfunc): call cfunc with
       (argv[0], data, argc, argv) to pass all arguments.
    
    * eval.c (loop_i): adapted to new calling convention.

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/insnhelper.ci?r1=14319&r2=14318
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ChangeLog?r1=14319&r2=14318
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/enumerator.c?r1=14319&r2=14318

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 14318)
+++ ChangeLog	(revision 14319)
@@ -1,3 +1,10 @@
+Wed Dec 19 15:37:06 2007  Yukihiro Matsumoto  <matz@r...>
+
+	* insnhelper.ci (vm_yield_with_cfunc): call cfunc with
+	   (argv[0], data, argc, argv) to pass all arguments.
+
+	* eval.c (loop_i): adapted to new calling convention.
+
 Wed Dec 19 15:13:20 2007  Yukihiro Matsumoto  <matz@r...>
 
 	* string.c (rb_str_justify): should propagate encoding from pad
Index: enumerator.c
===================================================================
--- enumerator.c	(revision 14318)
+++ enumerator.c	(revision 14319)
@@ -225,14 +225,9 @@
 }
 
 static VALUE
-enumerator_each_i(VALUE v, VALUE enum_obj, VALUE argc)
+enumerator_each_i(VALUE v, VALUE enum_obj, int argc, VALUE *argv)
 {
-    if (argc == 1) {
-	return rb_yield(v);
-    }
-    else {
-	return rb_yield_values2(argc, RARRAY_PTR(v));
-    }
+    return rb_yield_values2(argc, argv);
 }
 
 static VALUE
Index: insnhelper.ci
===================================================================
--- insnhelper.ci	(revision 14318)
+++ insnhelper.ci	(revision 14319)
@@ -650,23 +650,18 @@
     if (lambda) {
 	arg = rb_ary_new4(argc, argv);
     }
+    else if (argc == 0) {
+	arg = Qnil;
+    }
     else {
-	if (argc == 1) {
-	    arg = *argv;
-	}
-	else if (argc > 1) {
-	    arg = rb_ary_new4(argc, argv);
-	}
-	else {
-	    arg = rb_ary_new();
-	}
+	arg = argv[0];
     }
 
     vm_push_frame(th, 0, FRAME_MAGIC_IFUNC,
 		  self, (VALUE)block->dfp,
 		  0, th->cfp->sp, block->lfp, 1);
 
-    val = (*ifunc->nd_cfnc) (arg, ifunc->nd_tval, (VALUE) argc);
+    val = (*ifunc->nd_cfnc) (arg, ifunc->nd_tval, argc, argv);
 
     th->cfp++;
     return val;

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml

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