diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2014-03-18 12:42:35 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2014-03-18 12:42:35 +0900 |
| commit | b844b968581d19c54c2076e1d33531808cc0e6a5 (patch) | |
| tree | e6a20679d75298f3aa39f97465e5c9db5461a18c | |
| parent | 4c690b23a6f9ec9fa4dd2c9893da59edbaba2647 (diff) | |
| download | mruby-b844b968581d19c54c2076e1d33531808cc0e6a5.tar.gz mruby-b844b968581d19c54c2076e1d33531808cc0e6a5.zip | |
add Fiber#== from #1865 patch
| -rw-r--r-- | mrbgems/mruby-fiber/src/fiber.c | 14 | ||||
| -rw-r--r-- | mrbgems/mruby-fiber/test/fiber.rb | 13 |
2 files changed, 27 insertions, 0 deletions
diff --git a/mrbgems/mruby-fiber/src/fiber.c b/mrbgems/mruby-fiber/src/fiber.c index eb09d2b26..f67e02e56 100644 --- a/mrbgems/mruby-fiber/src/fiber.c +++ b/mrbgems/mruby-fiber/src/fiber.c @@ -215,6 +215,19 @@ fiber_alive_p(mrb_state *mrb, mrb_value self) return mrb_bool_value(c->status != MRB_FIBER_TERMINATED); } +static mrb_value +fiber_eq(mrb_state *mrb, mrb_value self) +{ + mrb_value other; + mrb_get_args(mrb, "o", &other); + + if(mrb_type(other) != MRB_TT_FIBER) { + return mrb_false_value(); + } + return mrb_bool_value(fiber_ptr(self) == fiber_ptr(other)); +} + + mrb_value mrb_fiber_yield(mrb_state *mrb, int len, mrb_value *a) { @@ -289,6 +302,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, "resume", fiber_resume, MRB_ARGS_ANY()); mrb_define_method(mrb, c, "alive?", fiber_alive_p, MRB_ARGS_NONE()); + mrb_define_method(mrb, c, "==", fiber_eq, MRB_ARGS_REQ(1)); mrb_define_class_method(mrb, c, "yield", fiber_yield, MRB_ARGS_ANY()); mrb_define_class_method(mrb, c, "current", fiber_current, MRB_ARGS_NONE()); diff --git a/mrbgems/mruby-fiber/test/fiber.rb b/mrbgems/mruby-fiber/test/fiber.rb index 216ad5572..5e42e9c57 100644 --- a/mrbgems/mruby-fiber/test/fiber.rb +++ b/mrbgems/mruby-fiber/test/fiber.rb @@ -17,6 +17,19 @@ assert('Fiber#alive?') { r1 == true and r2 == false } +assert('Fiber#==') do + root = Fiber.current + assert_equal root, root + assert_equal root, Fiber.current + assert_false root != Fiber.current + f = Fiber.new { + assert_false root == Fiber.current + } + f.resume + assert_false f == root + assert_true f != root +end + assert('Fiber.yield') { f = Fiber.new{|x| Fiber.yield(x == 3)} f.resume(3) |
