summaryrefslogtreecommitdiffstats
path: root/enumerator.c
diff options
context:
space:
mode:
authorko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2007-08-21 18:51:39 +0000
committerko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2007-08-21 18:51:39 +0000
commitbb71c0e99060462478408a3d9ae428674e5ee013 (patch)
tree778e478e788a5284ebdb9798c7193233be428ac3 /enumerator.c
parentc99478310d6ca0037f0d1f5a66d04bd8d463308a (diff)
downloadruby-bb71c0e99060462478408a3d9ae428674e5ee013.tar.gz
ruby-bb71c0e99060462478408a3d9ae428674e5ee013.tar.xz
ruby-bb71c0e99060462478408a3d9ae428674e5ee013.zip
* cont.c: add Fiber#resume and Fiber.yield.
and Fiber::Core class to realize Coroutine. * include/ruby/intern.h: declare rb_fiber_yield(), rb_fiber_resume(), * enumerator.c: use above api. * test/ruby/test_fiber.rb: fix and add tests for above changes. git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@13130 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'enumerator.c')
-rw-r--r--enumerator.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/enumerator.c b/enumerator.c
index e2be0e2e8..2557808ac 100644
--- a/enumerator.c
+++ b/enumerator.c
@@ -373,7 +373,7 @@ next_ii(VALUE i, VALUE obj)
VALUE tmp = e->next;
e->next = i;
- tmp = rb_fiber_yield(e->dst, 1, &tmp);
+ tmp = rb_fiber_yield(1, &tmp);
if (tmp != Qnil) {
e->dst = tmp;
}
@@ -388,7 +388,7 @@ next_i(VALUE curr, VALUE obj)
rb_block_call(obj, rb_intern("each"), 0, 0, next_ii, obj);
e->has_next = Qfalse;
- rb_fiber_yield(e->dst, 1, &e->next);
+ rb_fiber_yield(1, &e->next);
}
static void
@@ -398,7 +398,7 @@ next_init(VALUE obj, struct enumerator *e)
e->dst = curr;
e->fib = rb_block_call(rb_cFiber, rb_intern("new"), 0, 0, next_i, obj);
e->has_next = Qtrue;
- rb_fiber_yield(e->fib, 1, &curr);
+ rb_fiber_resume(e->fib, 1, &curr);
}
/*
@@ -432,7 +432,7 @@ enumerator_next(VALUE obj)
rb_raise(rb_eStopIteration, "Enumerator#each reached at end");
}
- v = rb_fiber_yield(e->fib, 1, &curr);
+ v = rb_fiber_resume(e->fib, 1, &curr);
return v;
}