summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2014-03-18 12:42:35 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2014-03-18 12:42:35 +0900
commitb844b968581d19c54c2076e1d33531808cc0e6a5 (patch)
treee6a20679d75298f3aa39f97465e5c9db5461a18c
parent4c690b23a6f9ec9fa4dd2c9893da59edbaba2647 (diff)
downloadmruby-b844b968581d19c54c2076e1d33531808cc0e6a5.tar.gz
mruby-b844b968581d19c54c2076e1d33531808cc0e6a5.zip
add Fiber#== from #1865 patch
-rw-r--r--mrbgems/mruby-fiber/src/fiber.c14
-rw-r--r--mrbgems/mruby-fiber/test/fiber.rb13
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)