summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--common.mk1
-rw-r--r--iseq.c9
-rw-r--r--test/ruby/test_rubyvm.rb1
3 files changed, 9 insertions, 2 deletions
diff --git a/common.mk b/common.mk
index c703a6da48..05c807e3d2 100644
--- a/common.mk
+++ b/common.mk
@@ -6989,6 +6989,7 @@ iseq.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
iseq.$(OBJEXT): $(CCAN_DIR)/list/list.h
iseq.$(OBJEXT): $(CCAN_DIR)/str/str.h
iseq.$(OBJEXT): $(hdrdir)/ruby.h
+iseq.$(OBJEXT): $(hdrdir)/ruby/ractor.h
iseq.$(OBJEXT): $(hdrdir)/ruby/ruby.h
iseq.$(OBJEXT): $(top_srcdir)/internal/array.h
iseq.$(OBJEXT): $(top_srcdir)/internal/bits.h
diff --git a/iseq.c b/iseq.c
index 0551e0c99a..eb65ec5f79 100644
--- a/iseq.c
+++ b/iseq.c
@@ -39,7 +39,7 @@
#include "vm_core.h"
#include "vm_callinfo.h"
#include "yjit.h"
-
+#include "ruby/ractor.h"
#include "builtin.h"
#include "insns.inc"
#include "insns_info.inc"
@@ -617,7 +617,12 @@ prepare_iseq_build(rb_iseq_t *iseq,
ISEQ_ORIGINAL_ISEQ_CLEAR(iseq);
body->variable.flip_count = 0;
- RB_OBJ_WRITE(iseq, &body->variable.script_lines, script_lines);
+ if (NIL_P(script_lines)) {
+ RB_OBJ_WRITE(iseq, &body->variable.script_lines, Qnil);
+ }
+ else {
+ RB_OBJ_WRITE(iseq, &body->variable.script_lines, rb_ractor_make_shareable(script_lines));
+ }
ISEQ_COMPILE_DATA_ALLOC(iseq);
RB_OBJ_WRITE(iseq, &ISEQ_COMPILE_DATA(iseq)->err_info, err_info);
diff --git a/test/ruby/test_rubyvm.rb b/test/ruby/test_rubyvm.rb
index fecaacfa78..a6d0b1a727 100644
--- a/test/ruby/test_rubyvm.rb
+++ b/test/ruby/test_rubyvm.rb
@@ -49,6 +49,7 @@ class TestRubyVM < Test::Unit::TestCase
iseq.each_child{|child|
assert_equal lines, child.script_lines
}
+ assert lines.frozen?
# don't keep
RubyVM.keep_script_lines = false