diff options
| author | skandhas <[email protected]> | 2013-05-27 15:21:56 +0800 |
|---|---|---|
| committer | skandhas <[email protected]> | 2013-05-27 15:21:56 +0800 |
| commit | 345ba02e4d08b3fc966b9c094068c403e1acf3ae (patch) | |
| tree | bd431b577848725d99d2eba506768aa7875cdfce /mrbgems/mruby-fiber/src | |
| parent | 7b8ae1b8b64c281d983723d2c127f5713ad6e640 (diff) | |
| download | mruby-345ba02e4d08b3fc966b9c094068c403e1acf3ae.tar.gz mruby-345ba02e4d08b3fc966b9c094068c403e1acf3ae.zip | |
add Fiber#alive?
Diffstat (limited to 'mrbgems/mruby-fiber/src')
| -rw-r--r-- | mrbgems/mruby-fiber/src/fiber.c | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/mrbgems/mruby-fiber/src/fiber.c b/mrbgems/mruby-fiber/src/fiber.c index 317fdb06a..d5855caa3 100644 --- a/mrbgems/mruby-fiber/src/fiber.c +++ b/mrbgems/mruby-fiber/src/fiber.c @@ -190,6 +190,20 @@ fiber_resume(mrb_state *mrb, mrb_value self) /* * 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: * Fiber.yield(args, ...) -> obj * * Yields control back to the context that resumed the fiber, passing @@ -224,8 +238,9 @@ mrb_mruby_fiber_gem_init(mrb_state* mrb) c = mrb_define_class(mrb, "Fiber", mrb->object_class); MRB_SET_INSTANCE_TT(c, MRB_TT_FIBER); - 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, "initialize", fiber_init, MRB_ARGS_NONE()); + 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()); } |
