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

ruby-changes:12880

From: akr <ko1@a...>
Date: Fri, 21 Aug 2009 22:39:56 +0900 (JST)
Subject: [ruby-changes:12880] Ruby:r24615 (trunk): * enumerator.c (get_next_values): extracted from

akr	2009-08-21 22:39:35 +0900 (Fri, 21 Aug 2009)

  New Revision: 24615

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

  Log:
    * enumerator.c (get_next_values): extracted from
      enumerator_next_values.
      (enumerator_next_values): use get_next_values.
      (enumerator_peek_values): ditto.

  Modified files:
    trunk/ChangeLog
    trunk/enumerator.c

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 24614)
+++ ChangeLog	(revision 24615)
@@ -1,3 +1,10 @@
+Fri Aug 21 22:34:58 2009  Tanaka Akira  <akr@f...>
+
+	* enumerator.c (get_next_values): extracted from
+	  enumerator_next_values.
+	  (enumerator_next_values): use get_next_values.
+	  (enumerator_peek_values): ditto.
+
 Fri Aug 21 17:01:04 2009  Nobuyoshi Nakada  <nobu@r...>
 
 	* enc/unicode/name2ctype.h: split from enc/unicode.c and made a
Index: enumerator.c
===================================================================
--- enumerator.c	(revision 24614)
+++ enumerator.c	(revision 24615)
@@ -594,6 +594,31 @@
     e->lookahead = Qundef;
 }
 
+static VALUE
+get_next_values(VALUE obj, struct enumerator *e)
+{
+    VALUE curr, vs;
+
+    if (e->stop_exc)
+	rb_exc_raise(e->stop_exc);
+
+    curr = rb_fiber_current();
+
+    if (!e->fib || !rb_fiber_alive_p(e->fib)) {
+	next_init(obj, e);
+    }
+
+    vs = rb_fiber_resume(e->fib, 1, &curr);
+    if (e->stop_exc) {
+	e->fib = 0;
+	e->dst = Qnil;
+	e->lookahead = Qundef;
+	e->feedvalue = Qundef;
+	rb_exc_raise(e->stop_exc);
+    }
+    return vs;
+}
+
 /*
  * call-seq:
  *   e.next_values   => array
@@ -642,32 +667,15 @@
 enumerator_next_values(VALUE obj)
 {
     struct enumerator *e = enumerator_ptr(obj);
-    VALUE curr, v;
+    VALUE vs;
 
     if (e->lookahead != Qundef) {
-        v = e->lookahead;
+        vs = e->lookahead;
         e->lookahead = Qundef;
-        return v;
+        return vs;
     }
 
-    if (e->stop_exc)
-	rb_exc_raise(e->stop_exc);
-
-    curr = rb_fiber_current();
-
-    if (!e->fib || !rb_fiber_alive_p(e->fib)) {
-	next_init(obj, e);
-    }
-
-    v = rb_fiber_resume(e->fib, 1, &curr);
-    if (e->stop_exc) {
-	e->fib = 0;
-	e->dst = Qnil;
-	e->lookahead = Qundef;
-	e->feedvalue = Qundef;
-	rb_exc_raise(e->stop_exc);
-    }
-    return v;
+    return get_next_values(obj, e);
 }
 
 static VALUE
@@ -738,16 +746,11 @@
 enumerator_peek_values(VALUE obj)
 {
     struct enumerator *e = enumerator_ptr(obj);
-    VALUE v;
 
-    if (e->lookahead != Qundef) {
-        v = e->lookahead;
-        return v;
+    if (e->lookahead == Qundef) {
+        e->lookahead = get_next_values(obj, e);
     }
-
-    v = enumerator_next_values(obj);
-    e->lookahead = v;
-    return v;
+    return e->lookahead;
 }
 
 /*

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

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