diff options
author | ko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2007-08-21 18:51:39 +0000 |
---|---|---|
committer | ko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2007-08-21 18:51:39 +0000 |
commit | c5e4cd063838033dff617f360a5b670b9eedaece (patch) | |
tree | 778e478e788a5284ebdb9798c7193233be428ac3 /enumerator.c | |
parent | c4d6f4c01e44aa48070d091649795c586f3583e6 (diff) | |
download | ruby-c5e4cd063838033dff617f360a5b670b9eedaece.tar.gz |
* 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: svn+ssh://ci.ruby-lang.org/ruby/trunk@13130 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'enumerator.c')
-rw-r--r-- | enumerator.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/enumerator.c b/enumerator.c index e2be0e2e85..2557808acb 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; } |