Commit 8487ab06 authored by Yukihiro "Matz" Matsumoto's avatar Yukihiro "Matz" Matsumoto

Merge pull request #1267 from skandhas/pr-add-Fiber-alive_p

add Fiber#alive?
parents 7b8ae1b8 345ba02e
...@@ -188,6 +188,20 @@ fiber_resume(mrb_state *mrb, mrb_value self) ...@@ -188,6 +188,20 @@ fiber_resume(mrb_state *mrb, mrb_value self)
return fiber_result(mrb, a, len); return fiber_result(mrb, a, len);
} }
/*
* call-seq:
* fiber.alive? -> true or false
*
* Returns true if the fiber can still be resumed. After finishing
* execution of the fiber block this method will always return false.
*/
static mrb_value
fiber_alive_p(mrb_state *mrb, mrb_value self)
{
struct mrb_context *c = fiber_check(mrb, self);
return mrb_bool_value(c->status != MRB_FIBER_TERMINATED);
}
/* /*
* call-seq: * call-seq:
* Fiber.yield(args, ...) -> obj * Fiber.yield(args, ...) -> obj
...@@ -226,6 +240,7 @@ mrb_mruby_fiber_gem_init(mrb_state* mrb) ...@@ -226,6 +240,7 @@ mrb_mruby_fiber_gem_init(mrb_state* mrb)
mrb_define_method(mrb, c, "initialize", fiber_init, MRB_ARGS_NONE()); mrb_define_method(mrb, c, "initialize", fiber_init, MRB_ARGS_NONE());
mrb_define_method(mrb, c, "resume", fiber_resume, MRB_ARGS_ANY()); mrb_define_method(mrb, c, "resume", fiber_resume, MRB_ARGS_ANY());
mrb_define_method(mrb, c, "alive?", fiber_alive_p, MRB_ARGS_NONE());
mrb_define_class_method(mrb, c, "yield", fiber_yield, MRB_ARGS_ANY()); mrb_define_class_method(mrb, c, "yield", fiber_yield, MRB_ARGS_ANY());
} }
......
...@@ -8,6 +8,15 @@ assert('Fiber#resume') { ...@@ -8,6 +8,15 @@ assert('Fiber#resume') {
f.resume(2) f.resume(2)
} }
assert('Fiber#alive?') {
f = Fiber.new{ Fiber.yield }
f.resume
r1 = f.alive?
f.resume
r2 = f.alive?
r1 == true and r2 == false
}
assert('Fiber.yield') { assert('Fiber.yield') {
f = Fiber.new{|x| Fiber.yield(x == 3)} f = Fiber.new{|x| Fiber.yield(x == 3)}
f.resume(3) f.resume(3)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment