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

ruby-changes:23010

From: nobu <ko1@a...>
Date: Fri, 16 Mar 2012 15:02:48 +0900 (JST)
Subject: [ruby-changes:23010] nobu:r35059 (trunk): * enum.c (enum_first): remove duplication.

nobu	2012-03-16 15:02:37 +0900 (Fri, 16 Mar 2012)

  New Revision: 35059

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

  Log:
    * enum.c (enum_first): remove duplication.

  Modified files:
    trunk/ChangeLog
    trunk/enum.c

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 35058)
+++ ChangeLog	(revision 35059)
@@ -1,3 +1,7 @@
+Fri Mar 16 15:02:35 2012  Nobuyoshi Nakada  <nobu@r...>
+
+	* enum.c (enum_first): remove duplication.
+
 Fri Mar 16 14:43:18 2012  Yuki Sonoda (Yugui)  <yugui@y...>
 
 	* load.c (ruby_init_ext): don't free the given pointer itself.
Index: enum.c
===================================================================
--- enum.c	(revision 35058)
+++ enum.c	(revision 35059)
@@ -703,23 +703,8 @@
     return Qnil;		/* not reached */
 }
 
-static VALUE
-first_ary_i(VALUE i, VALUE params, int argc, VALUE *argv)
-{
-    NODE *memo = RNODE(params);
-    long n = memo->u3.cnt;
+static VALUE enum_take(VALUE obj, VALUE n);
 
-    ENUM_WANT_SVALUE();
-
-    rb_ary_push(memo->u1.value, i);
-    n--;
-    if (n <= 0) {
-	rb_iter_break();
-    }
-    memo->u3.cnt = n;
-    return Qnil;
-}
-
 /*
  *  call-seq:
  *     enum.first       ->  obj or nil
@@ -740,21 +725,9 @@
 enum_first(int argc, VALUE *argv, VALUE obj)
 {
     NODE *memo;
+    rb_check_arity(argc, 0, 1);
     if (argc > 0) {
-	VALUE ary = Qnil;
-	VALUE n;
-	long len = 0;
-
-	rb_scan_args(argc, argv, "01", &n);
-	len = NUM2LONG(n);
-	if (len == 0) return rb_ary_new2(0);
-	if (len < 0) {
-	    rb_raise(rb_eArgError, "negative length");
-	}
-	ary = rb_ary_new2(len);
-	memo = NEW_MEMO(ary, 0, len);
-	rb_block_call(obj, id_each, 0, 0, first_ary_i, (VALUE)memo);
-	return ary;
+	return enum_take(obj, argv[0]);
     }
     else {
 	memo = NEW_MEMO(Qnil, 0, 0);

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

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