[前][次][番号順一覧][スレッド一覧]

ruby-changes:68049

From: Samuel <ko1@a...>
Date: Mon, 20 Sep 2021 15:31:04 +0900 (JST)
Subject: [ruby-changes:68049] 649c87bd86 (master): Add C interface spec.

https://git.ruby-lang.org/ruby.git/commit/?id=649c87bd86

From 649c87bd86d08bee8cd61584e6ece34e15e6814d Mon Sep 17 00:00:00 2001
From: Samuel Williams <samuel.williams@o...>
Date: Mon, 20 Sep 2021 14:19:52 +1200
Subject: Add C interface spec.

---
 spec/ruby/optional/capi/ext/fiber_spec.c | 11 +++++++++
 spec/ruby/optional/capi/fiber_spec.rb    | 38 ++++++++++++++++++++++++++++++++
 2 files changed, 49 insertions(+)

diff --git a/spec/ruby/optional/capi/ext/fiber_spec.c b/spec/ruby/optional/capi/ext/fiber_spec.c
index 7912e87..f06a544 100644
--- a/spec/ruby/optional/capi/ext/fiber_spec.c
+++ b/spec/ruby/optional/capi/ext/fiber_spec.c
@@ -44,6 +44,13 @@ VALUE fiber_spec_rb_fiber_new(VALUE self) { https://github.com/ruby/ruby/blob/trunk/spec/ruby/optional/capi/ext/fiber_spec.c#L44
   return rb_fiber_new(fiber_spec_rb_fiber_new_function, Qnil);
 }
 
+#ifdef RUBY_VERSION_IS_3_1
+VALUE fiber_spec_rb_fiber_raise(int argc, VALUE *argv, VALUE self) {
+  VALUE fiber = argv[0];
+  return rb_fiber_raise(fiber, argc-1, argv+1);
+}
+#endif
+
 void Init_fiber_spec(void) {
   VALUE cls = rb_define_class("CApiFiberSpecs", rb_cObject);
   rb_define_method(cls, "rb_fiber_current", fiber_spec_rb_fiber_current, 0);
@@ -51,6 +58,10 @@ void Init_fiber_spec(void) { https://github.com/ruby/ruby/blob/trunk/spec/ruby/optional/capi/ext/fiber_spec.c#L58
   rb_define_method(cls, "rb_fiber_resume", fiber_spec_rb_fiber_resume, 2);
   rb_define_method(cls, "rb_fiber_yield", fiber_spec_rb_fiber_yield, 1);
   rb_define_method(cls, "rb_fiber_new", fiber_spec_rb_fiber_new, 0);
+
+#ifdef RUBY_VERSION_IS_3_1
+  rb_define_method(cls, "rb_fiber_raise", fiber_spec_rb_fiber_raise, -1);
+#endif
 }
 
 #ifdef __cplusplus
diff --git a/spec/ruby/optional/capi/fiber_spec.rb b/spec/ruby/optional/capi/fiber_spec.rb
index 196ddc4..92bac22 100644
--- a/spec/ruby/optional/capi/fiber_spec.rb
+++ b/spec/ruby/optional/capi/fiber_spec.rb
@@ -48,4 +48,42 @@ describe "C-API Fiber function" do https://github.com/ruby/ruby/blob/trunk/spec/ruby/optional/capi/fiber_spec.rb#L48
       fiber.resume(42).should == "42"
     end
   end
+
+  describe "rb_fiber_raise" do
+    ruby_version_is '3.1' do
+      it "raises an exception on the resumed fiber" do
+        fiber = Fiber.new do
+          begin
+            Fiber.yield
+          rescue => error
+            error
+          end
+        end
+
+        fiber.resume
+
+        result = @s.rb_fiber_raise(fiber, "Boom!")
+        result.should be_an_instance_of(RuntimeError)
+        result.message.should == "Boom!"
+      end
+
+      it "raises an exception on the transferred fiber" do
+        main = Fiber.current
+
+        fiber = Fiber.new do
+          begin
+            main.transfer
+          rescue => error
+            error
+          end
+        end
+
+        fiber.transfer
+
+        result = @s.rb_fiber_raise(fiber, "Boom!")
+        result.should be_an_instance_of(RuntimeError)
+        result.message.should == "Boom!"
+      end
+    end
+  end
 end
-- 
cgit v1.1


--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]