From d557f17974384dde4ff2da021a1b38905a39bda2 Mon Sep 17 00:00:00 2001 From: Benoit Daloze Date: Tue, 20 Dec 2022 18:10:57 +0100 Subject: Use an experimental warning for Fiber#storage= --- common.mk | 14 ++++++++++++++ cont.c | 6 ++++++ test/fiber/test_storage.rb | 7 +++++-- 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 -- cgit v1.2.3