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/