summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenoit Daloze <eregontp@gmail.com>2022-12-20 18:10:57 +0100
committerBenoit Daloze <eregontp@gmail.com>2022-12-20 19:32:23 +0100
commitd557f17974384dde4ff2da021a1b38905a39bda2 (patch)
treec9748de69b53d3f9865284ffdc3de08ee165d74c
parent45175962a6fd74ab2e9ba92f1280f3987af25494 (diff)
Use an experimental warning for Fiber#storage=
Notes
Notes: Merged: https://github.com/ruby/ruby/pull/6972
-rw-r--r--common.mk14
-rw-r--r--cont.c6
-rw-r--r--test/fiber/test_storage.rb7
3 files changed, 25 insertions, 2 deletions
diff --git a/common.mk b/common.mk
index 27340bd4cc..0d41d24947 100644
--- a/common.mk
+++ b/common.mk
@@ -3406,12 +3406,14 @@ cont.$(OBJEXT): $(top_srcdir)/internal/array.h
cont.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h
cont.$(OBJEXT): $(top_srcdir)/internal/compilers.h
cont.$(OBJEXT): $(top_srcdir)/internal/cont.h
+cont.$(OBJEXT): $(top_srcdir)/internal/error.h
cont.$(OBJEXT): $(top_srcdir)/internal/gc.h
cont.$(OBJEXT): $(top_srcdir)/internal/imemo.h
cont.$(OBJEXT): $(top_srcdir)/internal/proc.h
cont.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
cont.$(OBJEXT): $(top_srcdir)/internal/serial.h
cont.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
+cont.$(OBJEXT): $(top_srcdir)/internal/string.h
cont.$(OBJEXT): $(top_srcdir)/internal/variable.h
cont.$(OBJEXT): $(top_srcdir)/internal/vm.h
cont.$(OBJEXT): $(top_srcdir)/internal/warnings.h
@@ -3432,6 +3434,7 @@ cont.$(OBJEXT): {$(VPATH)}constant.h
cont.$(OBJEXT): {$(VPATH)}cont.c
cont.$(OBJEXT): {$(VPATH)}debug_counter.h
cont.$(OBJEXT): {$(VPATH)}defines.h
+cont.$(OBJEXT): {$(VPATH)}encoding.h
cont.$(OBJEXT): {$(VPATH)}eval_intern.h
cont.$(OBJEXT): {$(VPATH)}fiber/scheduler.h
cont.$(OBJEXT): {$(VPATH)}gc.h
@@ -3509,6 +3512,15 @@ cont.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
cont.$(OBJEXT): {$(VPATH)}internal/ctype.h
cont.$(OBJEXT): {$(VPATH)}internal/dllexport.h
cont.$(OBJEXT): {$(VPATH)}internal/dosish.h
+cont.$(OBJEXT): {$(VPATH)}internal/encoding/coderange.h
+cont.$(OBJEXT): {$(VPATH)}internal/encoding/ctype.h
+cont.$(OBJEXT): {$(VPATH)}internal/encoding/encoding.h
+cont.$(OBJEXT): {$(VPATH)}internal/encoding/pathname.h
+cont.$(OBJEXT): {$(VPATH)}internal/encoding/re.h
+cont.$(OBJEXT): {$(VPATH)}internal/encoding/sprintf.h
+cont.$(OBJEXT): {$(VPATH)}internal/encoding/string.h
+cont.$(OBJEXT): {$(VPATH)}internal/encoding/symbol.h
+cont.$(OBJEXT): {$(VPATH)}internal/encoding/transcode.h
cont.$(OBJEXT): {$(VPATH)}internal/error.h
cont.$(OBJEXT): {$(VPATH)}internal/eval.h
cont.$(OBJEXT): {$(VPATH)}internal/event.h
@@ -3584,6 +3596,8 @@ cont.$(OBJEXT): {$(VPATH)}method.h
cont.$(OBJEXT): {$(VPATH)}missing.h
cont.$(OBJEXT): {$(VPATH)}mjit.h
cont.$(OBJEXT): {$(VPATH)}node.h
+cont.$(OBJEXT): {$(VPATH)}onigmo.h
+cont.$(OBJEXT): {$(VPATH)}oniguruma.h
cont.$(OBJEXT): {$(VPATH)}ractor.h
cont.$(OBJEXT): {$(VPATH)}ractor_core.h
cont.$(OBJEXT): {$(VPATH)}ruby_assert.h
diff --git a/cont.c b/cont.c
index a1cb4112d2..521a91b2d9 100644
--- a/cont.c
+++ b/cont.c
@@ -29,6 +29,7 @@ extern int madvise(caddr_t, size_t, int);
#include "gc.h"
#include "internal.h"
#include "internal/cont.h"
+#include "internal/error.h"
#include "internal/proc.h"
#include "internal/sanitizers.h"
#include "internal/warnings.h"
@@ -2128,6 +2129,11 @@ fiber_storage_validate(VALUE value)
static VALUE
rb_fiber_storage_set(VALUE self, VALUE value)
{
+ if (rb_warning_category_enabled_p(RB_WARN_CATEGORY_EXPERIMENTAL)) {
+ rb_category_warn(RB_WARN_CATEGORY_EXPERIMENTAL,
+ "Fiber#storage= is experimental and may be removed in the future!");
+ }
+
fiber_storage_validate(value);
fiber_ptr(self)->cont.saved_ec.storage = rb_obj_dup(value);
diff --git a/test/fiber/test_storage.rb b/test/fiber/test_storage.rb
index d5f1f10a68..6e75b71347 100644
--- a/test/fiber/test_storage.rb
+++ b/test/fiber/test_storage.rb
@@ -31,15 +31,18 @@ class TestFiberStorage < Test::Unit::TestCase
end
def test_storage_assignment
+ old, Warning[:experimental] = Warning[:experimental], false
+
Fiber.new do
Fiber.current.storage = {foo: :bar}
assert_equal :bar, Fiber[:foo]
end.resume
+ ensure
+ Warning[:experimental] = old
end
def test_inherited_storage
- Fiber.new do
- Fiber.current.storage = {foo: :bar}
+ Fiber.new(storage: {foo: :bar}) do
f = Fiber.new do
assert_equal :bar, Fiber[:foo]
end