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

ruby-changes:13394

From: nobu <ko1@a...>
Date: Wed, 30 Sep 2009 00:37:42 +0900 (JST)
Subject: [ruby-changes:13394] Ruby:r25164 (trunk): * enumerator.c (enumerator_block_call): extracted.

nobu	2009-09-30 00:37:28 +0900 (Wed, 30 Sep 2009)

  New Revision: 25164

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=25164

  Log:
    * enumerator.c (enumerator_block_call): extracted.

  Modified files:
    trunk/ChangeLog
    trunk/enumerator.c

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 25163)
+++ ChangeLog	(revision 25164)
@@ -1,3 +1,7 @@
+Wed Sep 30 00:37:27 2009  Nobuyoshi Nakada  <nobu@r...>
+
+	* enumerator.c (enumerator_block_call): extracted.
+
 Wed Sep 30 00:00:25 2009  NARUSE, Yui  <naruse@r...>
 
 	* string.c (rb_str_inspect): escape as \x{XXXX} when the encoding is
Index: enumerator.c
===================================================================
--- enumerator.c	(revision 25163)
+++ enumerator.c	(revision 25164)
@@ -400,7 +400,8 @@
 	    rb_raise(rb_eArgError, "wrong number of argument (0 for 1+)");
 
 	recv = generator_init(generator_allocate(rb_cGenerator), rb_block_proc());
-    } else {
+    }
+    else {
 	recv = *argv++;
 	if (--argc) {
 	    meth = *argv++;
@@ -445,6 +446,21 @@
     return enumerator_init(enumerator_allocate(rb_cEnumerator), obj, meth, argc, argv);
 }
 
+static VALUE
+enumerator_block_call(VALUE obj, rb_block_call_func *func, VALUE arg)
+{
+    int argc = 0;
+    VALUE *argv = 0;
+    const struct enumerator *e = enumerator_ptr(obj);
+    ID meth = e->meth;
+
+    if (e->args) {
+	argc = RARRAY_LENINT(e->args);
+	argv = RARRAY_PTR(e->args);
+    }
+    return rb_block_call(e->obj, meth, argc, argv, func, arg);
+}
+
 /*
  *  call-seq:
  *    enum.each {...}
@@ -456,24 +472,15 @@
 static VALUE
 enumerator_each(VALUE obj)
 {
-    struct enumerator *e;
-    int argc = 0;
-    VALUE *argv = 0;
-
     if (!rb_block_given_p()) return obj;
-    e = enumerator_ptr(obj);
-    if (e->args) {
-	argc = RARRAY_LENINT(e->args);
-	argv = RARRAY_PTR(e->args);
-    }
-    return rb_block_call(e->obj, e->meth, argc, argv,
-			 enumerator_each_i, (VALUE)e);
+    return enumerator_block_call(obj, enumerator_each_i, obj);
 }
 
 static VALUE
-enumerator_with_index_i(VALUE val, VALUE *memo, int argc, VALUE *argv)
+enumerator_with_index_i(VALUE val, VALUE m, int argc, VALUE *argv)
 {
     VALUE idx;
+    VALUE *memo = (VALUE *)m;
 
     idx = INT2FIX(*memo);
     ++*memo;
@@ -496,23 +503,12 @@
 static VALUE
 enumerator_with_index(int argc, VALUE *argv, VALUE obj)
 {
-    struct enumerator *e;
     VALUE memo;
 
     rb_scan_args(argc, argv, "01", &memo);
     RETURN_ENUMERATOR(obj, argc, argv);
     memo = NIL_P(memo) ? 0 : (VALUE)NUM2LONG(memo);
-    e = enumerator_ptr(obj);
-    if (e->args) {
-	argc = RARRAY_LENINT(e->args);
-	argv = RARRAY_PTR(e->args);
-    }
-    else {
-	argc = 0;
-	argv = NULL;
-    }
-    return rb_block_call(e->obj, e->meth, argc, argv,
-			 enumerator_with_index_i, (VALUE)&memo);
+    return enumerator_block_call(obj, enumerator_with_index_i, (VALUE)&memo);
 }
 
 /*
@@ -553,18 +549,8 @@
 static VALUE
 enumerator_with_object(VALUE obj, VALUE memo)
 {
-    struct enumerator *e;
-    int argc = 0;
-    VALUE *argv = 0;
-
     RETURN_ENUMERATOR(obj, 1, &memo);
-    e = enumerator_ptr(obj);
-    if (e->args) {
-	argc = RARRAY_LENINT(e->args);
-	argv = RARRAY_PTR(e->args);
-    }
-    rb_block_call(e->obj, e->meth, argc, argv,
-		  enumerator_with_object_i, memo);
+    enumerator_block_call(obj, enumerator_with_object_i, memo);
 
     return memo;
 }

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

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