debase-ruby_core_source 0.10.11 → 0.10.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/addr2line.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/builtin.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/ccan/build_assert/build_assert.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/ccan/check_type/check_type.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/ccan/container_of/container_of.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/ccan/list/list.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/ccan/str/str.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/constant.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/debug_counter.h +38 -4
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/dln.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/encindex.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/eval_intern.h +16 -5
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/gc.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/hrtime.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/id.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/id_table.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/insns.inc +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/insns_info.inc +93 -89
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/array.h +5 -0
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/bignum.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/bits.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/class.h +7 -1
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/compar.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/compile.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/compilers.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/complex.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/cont.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/dir.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/enc.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/encoding.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/enum.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/enumerator.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/error.h +0 -7
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/eval.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/file.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/fixnum.h +1 -1
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/gc.h +9 -2
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/hash.h +2 -1
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/imemo.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/inits.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/io.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/load.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/loadpath.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/math.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/missing.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/numeric.h +4 -1
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/object.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/parse.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/proc.h +1 -0
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/process.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/random.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/range.h +4 -0
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/rational.h +2 -0
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/re.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/sanitizers.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/scheduler.h +9 -0
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/serial.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/signal.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/static_assert.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/string.h +5 -0
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/struct.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/symbol.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/thread.h +0 -6
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/time.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/transcode.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/util.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/variable.h +1 -0
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/vm.h +7 -6
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/warnings.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/iseq.h +1 -0
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/known_errors.inc +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/method.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/mjit.h +37 -14
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/mjit_compile.inc +715 -557
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/node.h +2 -2
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/node_name.inc +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/opt_sc.inc +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/optinsn.inc +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/optunifs.inc +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/parse.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/probes_helper.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1/ractor.h → ruby-3.0.0-p0/ractor_core.h} +97 -25
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/regenc.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/regint.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/regparse.h +0 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-p0/revision.h +2 -0
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/ruby_assert.h +0 -0
- data/lib/debase/ruby_core_source/ruby-3.0.0-p0/ruby_atomic.h +23 -0
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/siphash.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/symbol.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/thread_pthread.h +23 -14
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/thread_win32.h +5 -10
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/timev.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/transcode_data.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/transient_heap.h +4 -0
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/variable.h +2 -1
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/version.h +3 -3
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/vm.inc +94 -99
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/vm_call_iseq_optimized.inc +48 -48
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/vm_callinfo.h +2 -3
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/vm_core.h +96 -25
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/vm_debug.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/vm_exec.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/vm_insnhelper.h +1 -4
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/vm_opts.h +0 -0
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/vm_sync.h +44 -5
- data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/vmtc.inc +0 -0
- data/lib/debase/ruby_core_source/version.rb +1 -1
- metadata +111 -113
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/mjit.h +0 -29
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/ractor_pub.h +0 -50
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/revision.h +0 -2
- data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/ruby_atomic.h +0 -236
data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/vm_call_iseq_optimized.inc
RENAMED
|
@@ -8,171 +8,171 @@
|
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
static VALUE
|
|
11
|
-
vm_call_iseq_setup_normal_0start_0params_0locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling
|
|
11
|
+
vm_call_iseq_setup_normal_0start_0params_0locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
|
|
12
12
|
{
|
|
13
13
|
RB_DEBUG_COUNTER_INC(ccf_iseq_fix);
|
|
14
|
-
return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(
|
|
14
|
+
return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 0, 0);
|
|
15
15
|
}
|
|
16
16
|
|
|
17
17
|
static VALUE
|
|
18
|
-
vm_call_iseq_setup_normal_0start_0params_1locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling
|
|
18
|
+
vm_call_iseq_setup_normal_0start_0params_1locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
|
|
19
19
|
{
|
|
20
20
|
RB_DEBUG_COUNTER_INC(ccf_iseq_fix);
|
|
21
|
-
return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(
|
|
21
|
+
return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 0, 1);
|
|
22
22
|
}
|
|
23
23
|
|
|
24
24
|
static VALUE
|
|
25
|
-
vm_call_iseq_setup_normal_0start_0params_2locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling
|
|
25
|
+
vm_call_iseq_setup_normal_0start_0params_2locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
|
|
26
26
|
{
|
|
27
27
|
RB_DEBUG_COUNTER_INC(ccf_iseq_fix);
|
|
28
|
-
return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(
|
|
28
|
+
return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 0, 2);
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
static VALUE
|
|
32
|
-
vm_call_iseq_setup_normal_0start_0params_3locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling
|
|
32
|
+
vm_call_iseq_setup_normal_0start_0params_3locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
|
|
33
33
|
{
|
|
34
34
|
RB_DEBUG_COUNTER_INC(ccf_iseq_fix);
|
|
35
|
-
return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(
|
|
35
|
+
return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 0, 3);
|
|
36
36
|
}
|
|
37
37
|
|
|
38
38
|
static VALUE
|
|
39
|
-
vm_call_iseq_setup_normal_0start_0params_4locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling
|
|
39
|
+
vm_call_iseq_setup_normal_0start_0params_4locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
|
|
40
40
|
{
|
|
41
41
|
RB_DEBUG_COUNTER_INC(ccf_iseq_fix);
|
|
42
|
-
return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(
|
|
42
|
+
return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 0, 4);
|
|
43
43
|
}
|
|
44
44
|
|
|
45
45
|
static VALUE
|
|
46
|
-
vm_call_iseq_setup_normal_0start_0params_5locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling
|
|
46
|
+
vm_call_iseq_setup_normal_0start_0params_5locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
|
|
47
47
|
{
|
|
48
48
|
RB_DEBUG_COUNTER_INC(ccf_iseq_fix);
|
|
49
|
-
return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(
|
|
49
|
+
return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 0, 5);
|
|
50
50
|
}
|
|
51
51
|
|
|
52
52
|
static VALUE
|
|
53
|
-
vm_call_iseq_setup_normal_0start_1params_0locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling
|
|
53
|
+
vm_call_iseq_setup_normal_0start_1params_0locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
|
|
54
54
|
{
|
|
55
55
|
RB_DEBUG_COUNTER_INC(ccf_iseq_fix);
|
|
56
|
-
return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(
|
|
56
|
+
return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 1, 0);
|
|
57
57
|
}
|
|
58
58
|
|
|
59
59
|
static VALUE
|
|
60
|
-
vm_call_iseq_setup_normal_0start_1params_1locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling
|
|
60
|
+
vm_call_iseq_setup_normal_0start_1params_1locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
|
|
61
61
|
{
|
|
62
62
|
RB_DEBUG_COUNTER_INC(ccf_iseq_fix);
|
|
63
|
-
return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(
|
|
63
|
+
return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 1, 1);
|
|
64
64
|
}
|
|
65
65
|
|
|
66
66
|
static VALUE
|
|
67
|
-
vm_call_iseq_setup_normal_0start_1params_2locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling
|
|
67
|
+
vm_call_iseq_setup_normal_0start_1params_2locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
|
|
68
68
|
{
|
|
69
69
|
RB_DEBUG_COUNTER_INC(ccf_iseq_fix);
|
|
70
|
-
return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(
|
|
70
|
+
return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 1, 2);
|
|
71
71
|
}
|
|
72
72
|
|
|
73
73
|
static VALUE
|
|
74
|
-
vm_call_iseq_setup_normal_0start_1params_3locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling
|
|
74
|
+
vm_call_iseq_setup_normal_0start_1params_3locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
|
|
75
75
|
{
|
|
76
76
|
RB_DEBUG_COUNTER_INC(ccf_iseq_fix);
|
|
77
|
-
return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(
|
|
77
|
+
return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 1, 3);
|
|
78
78
|
}
|
|
79
79
|
|
|
80
80
|
static VALUE
|
|
81
|
-
vm_call_iseq_setup_normal_0start_1params_4locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling
|
|
81
|
+
vm_call_iseq_setup_normal_0start_1params_4locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
|
|
82
82
|
{
|
|
83
83
|
RB_DEBUG_COUNTER_INC(ccf_iseq_fix);
|
|
84
|
-
return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(
|
|
84
|
+
return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 1, 4);
|
|
85
85
|
}
|
|
86
86
|
|
|
87
87
|
static VALUE
|
|
88
|
-
vm_call_iseq_setup_normal_0start_1params_5locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling
|
|
88
|
+
vm_call_iseq_setup_normal_0start_1params_5locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
|
|
89
89
|
{
|
|
90
90
|
RB_DEBUG_COUNTER_INC(ccf_iseq_fix);
|
|
91
|
-
return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(
|
|
91
|
+
return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 1, 5);
|
|
92
92
|
}
|
|
93
93
|
|
|
94
94
|
static VALUE
|
|
95
|
-
vm_call_iseq_setup_normal_0start_2params_0locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling
|
|
95
|
+
vm_call_iseq_setup_normal_0start_2params_0locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
|
|
96
96
|
{
|
|
97
97
|
RB_DEBUG_COUNTER_INC(ccf_iseq_fix);
|
|
98
|
-
return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(
|
|
98
|
+
return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 2, 0);
|
|
99
99
|
}
|
|
100
100
|
|
|
101
101
|
static VALUE
|
|
102
|
-
vm_call_iseq_setup_normal_0start_2params_1locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling
|
|
102
|
+
vm_call_iseq_setup_normal_0start_2params_1locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
|
|
103
103
|
{
|
|
104
104
|
RB_DEBUG_COUNTER_INC(ccf_iseq_fix);
|
|
105
|
-
return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(
|
|
105
|
+
return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 2, 1);
|
|
106
106
|
}
|
|
107
107
|
|
|
108
108
|
static VALUE
|
|
109
|
-
vm_call_iseq_setup_normal_0start_2params_2locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling
|
|
109
|
+
vm_call_iseq_setup_normal_0start_2params_2locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
|
|
110
110
|
{
|
|
111
111
|
RB_DEBUG_COUNTER_INC(ccf_iseq_fix);
|
|
112
|
-
return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(
|
|
112
|
+
return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 2, 2);
|
|
113
113
|
}
|
|
114
114
|
|
|
115
115
|
static VALUE
|
|
116
|
-
vm_call_iseq_setup_normal_0start_2params_3locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling
|
|
116
|
+
vm_call_iseq_setup_normal_0start_2params_3locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
|
|
117
117
|
{
|
|
118
118
|
RB_DEBUG_COUNTER_INC(ccf_iseq_fix);
|
|
119
|
-
return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(
|
|
119
|
+
return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 2, 3);
|
|
120
120
|
}
|
|
121
121
|
|
|
122
122
|
static VALUE
|
|
123
|
-
vm_call_iseq_setup_normal_0start_2params_4locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling
|
|
123
|
+
vm_call_iseq_setup_normal_0start_2params_4locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
|
|
124
124
|
{
|
|
125
125
|
RB_DEBUG_COUNTER_INC(ccf_iseq_fix);
|
|
126
|
-
return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(
|
|
126
|
+
return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 2, 4);
|
|
127
127
|
}
|
|
128
128
|
|
|
129
129
|
static VALUE
|
|
130
|
-
vm_call_iseq_setup_normal_0start_2params_5locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling
|
|
130
|
+
vm_call_iseq_setup_normal_0start_2params_5locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
|
|
131
131
|
{
|
|
132
132
|
RB_DEBUG_COUNTER_INC(ccf_iseq_fix);
|
|
133
|
-
return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(
|
|
133
|
+
return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 2, 5);
|
|
134
134
|
}
|
|
135
135
|
|
|
136
136
|
static VALUE
|
|
137
|
-
vm_call_iseq_setup_normal_0start_3params_0locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling
|
|
137
|
+
vm_call_iseq_setup_normal_0start_3params_0locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
|
|
138
138
|
{
|
|
139
139
|
RB_DEBUG_COUNTER_INC(ccf_iseq_fix);
|
|
140
|
-
return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(
|
|
140
|
+
return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 3, 0);
|
|
141
141
|
}
|
|
142
142
|
|
|
143
143
|
static VALUE
|
|
144
|
-
vm_call_iseq_setup_normal_0start_3params_1locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling
|
|
144
|
+
vm_call_iseq_setup_normal_0start_3params_1locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
|
|
145
145
|
{
|
|
146
146
|
RB_DEBUG_COUNTER_INC(ccf_iseq_fix);
|
|
147
|
-
return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(
|
|
147
|
+
return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 3, 1);
|
|
148
148
|
}
|
|
149
149
|
|
|
150
150
|
static VALUE
|
|
151
|
-
vm_call_iseq_setup_normal_0start_3params_2locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling
|
|
151
|
+
vm_call_iseq_setup_normal_0start_3params_2locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
|
|
152
152
|
{
|
|
153
153
|
RB_DEBUG_COUNTER_INC(ccf_iseq_fix);
|
|
154
|
-
return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(
|
|
154
|
+
return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 3, 2);
|
|
155
155
|
}
|
|
156
156
|
|
|
157
157
|
static VALUE
|
|
158
|
-
vm_call_iseq_setup_normal_0start_3params_3locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling
|
|
158
|
+
vm_call_iseq_setup_normal_0start_3params_3locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
|
|
159
159
|
{
|
|
160
160
|
RB_DEBUG_COUNTER_INC(ccf_iseq_fix);
|
|
161
|
-
return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(
|
|
161
|
+
return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 3, 3);
|
|
162
162
|
}
|
|
163
163
|
|
|
164
164
|
static VALUE
|
|
165
|
-
vm_call_iseq_setup_normal_0start_3params_4locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling
|
|
165
|
+
vm_call_iseq_setup_normal_0start_3params_4locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
|
|
166
166
|
{
|
|
167
167
|
RB_DEBUG_COUNTER_INC(ccf_iseq_fix);
|
|
168
|
-
return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(
|
|
168
|
+
return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 3, 4);
|
|
169
169
|
}
|
|
170
170
|
|
|
171
171
|
static VALUE
|
|
172
|
-
vm_call_iseq_setup_normal_0start_3params_5locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling
|
|
172
|
+
vm_call_iseq_setup_normal_0start_3params_5locals(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct rb_calling_info *calling)
|
|
173
173
|
{
|
|
174
174
|
RB_DEBUG_COUNTER_INC(ccf_iseq_fix);
|
|
175
|
-
return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(
|
|
175
|
+
return vm_call_iseq_setup_normal(ec, cfp, calling, vm_cc_cme(calling->cc), 0, 3, 5);
|
|
176
176
|
}
|
|
177
177
|
|
|
178
178
|
/* vm_call_iseq_handlers[param][local] */
|
|
@@ -267,8 +267,7 @@ vm_ci_markable(const struct rb_callinfo *ci)
|
|
|
267
267
|
typedef VALUE (*vm_call_handler)(
|
|
268
268
|
struct rb_execution_context_struct *ec,
|
|
269
269
|
struct rb_control_frame_struct *cfp,
|
|
270
|
-
struct rb_calling_info *calling
|
|
271
|
-
struct rb_call_data *cd);
|
|
270
|
+
struct rb_calling_info *calling);
|
|
272
271
|
|
|
273
272
|
// imemo_callcache
|
|
274
273
|
|
|
@@ -374,7 +373,7 @@ vm_cc_valid_p(const struct rb_callcache *cc, const rb_callable_method_entry_t *c
|
|
|
374
373
|
extern const struct rb_callcache *rb_vm_empty_cc(void);
|
|
375
374
|
#define vm_cc_empty() rb_vm_empty_cc()
|
|
376
375
|
|
|
377
|
-
/* callcache:
|
|
376
|
+
/* callcache: mutate */
|
|
378
377
|
|
|
379
378
|
static inline void
|
|
380
379
|
vm_cc_cme_set(const struct rb_callcache *cc, const struct rb_callable_method_entry_struct *cme)
|
|
@@ -225,8 +225,7 @@ struct iseq_inline_cache_entry {
|
|
|
225
225
|
};
|
|
226
226
|
|
|
227
227
|
struct iseq_inline_iv_cache_entry {
|
|
228
|
-
|
|
229
|
-
size_t index;
|
|
228
|
+
struct rb_iv_index_tbl_entry *entry;
|
|
230
229
|
};
|
|
231
230
|
|
|
232
231
|
union iseq_inline_storage_entry {
|
|
@@ -239,6 +238,8 @@ union iseq_inline_storage_entry {
|
|
|
239
238
|
};
|
|
240
239
|
|
|
241
240
|
struct rb_calling_info {
|
|
241
|
+
const struct rb_callinfo *ci;
|
|
242
|
+
const struct rb_callcache *cc;
|
|
242
243
|
VALUE block_handler;
|
|
243
244
|
VALUE recv;
|
|
244
245
|
int argc;
|
|
@@ -419,7 +420,7 @@ struct rb_iseq_constant_body {
|
|
|
419
420
|
|
|
420
421
|
char catch_except_p; /* If a frame of this ISeq may catch exception, set TRUE */
|
|
421
422
|
bool builtin_inline_p; // This ISeq's builtin func is safe to be inlined by MJIT
|
|
422
|
-
|
|
423
|
+
struct rb_id_table *outer_variables;
|
|
423
424
|
|
|
424
425
|
#if USE_MJIT
|
|
425
426
|
/* The following fields are MJIT related info. */
|
|
@@ -596,7 +597,7 @@ typedef struct rb_vm_struct {
|
|
|
596
597
|
unsigned int running: 1;
|
|
597
598
|
unsigned int thread_abort_on_exception: 1;
|
|
598
599
|
unsigned int thread_report_on_exception: 1;
|
|
599
|
-
unsigned int
|
|
600
|
+
unsigned int thread_ignore_deadlock: 1;
|
|
600
601
|
|
|
601
602
|
/* object management */
|
|
602
603
|
VALUE mark_object_ary;
|
|
@@ -618,9 +619,6 @@ typedef struct rb_vm_struct {
|
|
|
618
619
|
VALUE cmd[RUBY_NSIG];
|
|
619
620
|
} trap_list;
|
|
620
621
|
|
|
621
|
-
/* hook */
|
|
622
|
-
rb_hook_list_t global_hooks;
|
|
623
|
-
|
|
624
622
|
/* relation table of ensure - rollback for callcc */
|
|
625
623
|
struct st_table *ensure_rollback_table;
|
|
626
624
|
|
|
@@ -634,7 +632,7 @@ typedef struct rb_vm_struct {
|
|
|
634
632
|
struct list_head workqueue; /* <=> rb_workqueue_job.jnode */
|
|
635
633
|
rb_nativethread_lock_t workqueue_lock;
|
|
636
634
|
|
|
637
|
-
VALUE
|
|
635
|
+
VALUE orig_progname, progname;
|
|
638
636
|
VALUE coverages;
|
|
639
637
|
int coverage_mode;
|
|
640
638
|
|
|
@@ -650,6 +648,12 @@ typedef struct rb_vm_struct {
|
|
|
650
648
|
const struct rb_builtin_function *builtin_function_table;
|
|
651
649
|
int builtin_inline_index;
|
|
652
650
|
|
|
651
|
+
struct rb_id_table *negative_cme_table;
|
|
652
|
+
|
|
653
|
+
#if USE_VM_CLOCK
|
|
654
|
+
uint32_t clock;
|
|
655
|
+
#endif
|
|
656
|
+
|
|
653
657
|
/* params */
|
|
654
658
|
struct { /* size in byte */
|
|
655
659
|
size_t thread_vm_stack_size;
|
|
@@ -794,6 +798,7 @@ struct rb_vm_tag {
|
|
|
794
798
|
rb_jmpbuf_t buf;
|
|
795
799
|
struct rb_vm_tag *prev;
|
|
796
800
|
enum ruby_tag_type state;
|
|
801
|
+
unsigned int lock_rec;
|
|
797
802
|
};
|
|
798
803
|
|
|
799
804
|
STATIC_ASSERT(rb_vm_tag_buf_offset, offsetof(struct rb_vm_tag, buf) > 0);
|
|
@@ -845,6 +850,9 @@ struct rb_execution_context_struct {
|
|
|
845
850
|
/* interrupt flags */
|
|
846
851
|
rb_atomic_t interrupt_flag;
|
|
847
852
|
rb_atomic_t interrupt_mask; /* size should match flag */
|
|
853
|
+
#if USE_VM_CLOCK
|
|
854
|
+
uint32_t checked_clock;
|
|
855
|
+
#endif
|
|
848
856
|
|
|
849
857
|
rb_fiber_t *fiber_ptr;
|
|
850
858
|
struct rb_thread_struct *thread_ptr;
|
|
@@ -905,6 +913,10 @@ void rb_ec_initialize_vm_stack(rb_execution_context_t *ec, VALUE *stack, size_t
|
|
|
905
913
|
// @param ec the execution context to update.
|
|
906
914
|
void rb_ec_clear_vm_stack(rb_execution_context_t *ec);
|
|
907
915
|
|
|
916
|
+
struct rb_ext_config {
|
|
917
|
+
bool ractor_safe;
|
|
918
|
+
};
|
|
919
|
+
|
|
908
920
|
typedef struct rb_ractor_struct rb_ractor_t;
|
|
909
921
|
|
|
910
922
|
typedef struct rb_thread_struct {
|
|
@@ -993,6 +1005,8 @@ typedef struct rb_thread_struct {
|
|
|
993
1005
|
/* misc */
|
|
994
1006
|
VALUE name;
|
|
995
1007
|
|
|
1008
|
+
struct rb_ext_config ext_config;
|
|
1009
|
+
|
|
996
1010
|
#ifdef USE_SIGALTSTACK
|
|
997
1011
|
void *altstack;
|
|
998
1012
|
#endif
|
|
@@ -1017,11 +1031,13 @@ typedef enum {
|
|
|
1017
1031
|
RUBY_SYMBOL_EXPORT_BEGIN
|
|
1018
1032
|
|
|
1019
1033
|
/* node -> iseq */
|
|
1020
|
-
rb_iseq_t *rb_iseq_new (const rb_ast_body_t *ast, VALUE name, VALUE path, VALUE realpath,
|
|
1021
|
-
rb_iseq_t *rb_iseq_new_top (const rb_ast_body_t *ast, VALUE name, VALUE path, VALUE realpath,
|
|
1022
|
-
rb_iseq_t *rb_iseq_new_main (const rb_ast_body_t *ast, VALUE path, VALUE realpath,
|
|
1023
|
-
rb_iseq_t *
|
|
1024
|
-
|
|
1034
|
+
rb_iseq_t *rb_iseq_new (const rb_ast_body_t *ast, VALUE name, VALUE path, VALUE realpath, const rb_iseq_t *parent, enum iseq_type);
|
|
1035
|
+
rb_iseq_t *rb_iseq_new_top (const rb_ast_body_t *ast, VALUE name, VALUE path, VALUE realpath, const rb_iseq_t *parent);
|
|
1036
|
+
rb_iseq_t *rb_iseq_new_main (const rb_ast_body_t *ast, VALUE path, VALUE realpath, const rb_iseq_t *parent);
|
|
1037
|
+
rb_iseq_t *rb_iseq_new_eval (const rb_ast_body_t *ast, VALUE name, VALUE path, VALUE realpath, VALUE first_lineno, const rb_iseq_t *parent, int isolated_depth);
|
|
1038
|
+
rb_iseq_t *rb_iseq_new_with_opt(const rb_ast_body_t *ast, VALUE name, VALUE path, VALUE realpath, VALUE first_lineno, const rb_iseq_t *parent, int isolated_depth,
|
|
1039
|
+
enum iseq_type, const rb_compile_option_t*);
|
|
1040
|
+
|
|
1025
1041
|
struct iseq_link_anchor;
|
|
1026
1042
|
struct rb_iseq_new_with_callback_callback_func {
|
|
1027
1043
|
VALUE flags;
|
|
@@ -1063,6 +1079,7 @@ typedef struct {
|
|
|
1063
1079
|
|
|
1064
1080
|
VALUE rb_proc_isolate(VALUE self);
|
|
1065
1081
|
VALUE rb_proc_isolate_bang(VALUE self);
|
|
1082
|
+
VALUE rb_proc_ractor_make_shareable(VALUE self);
|
|
1066
1083
|
|
|
1067
1084
|
typedef struct {
|
|
1068
1085
|
VALUE flags; /* imemo header */
|
|
@@ -1156,18 +1173,19 @@ enum {
|
|
|
1156
1173
|
VM_FRAME_MAGIC_MASK = 0x7fff0001,
|
|
1157
1174
|
|
|
1158
1175
|
/* frame flag */
|
|
1159
|
-
VM_FRAME_FLAG_PASSED = 0x0010,
|
|
1160
1176
|
VM_FRAME_FLAG_FINISH = 0x0020,
|
|
1161
1177
|
VM_FRAME_FLAG_BMETHOD = 0x0040,
|
|
1162
1178
|
VM_FRAME_FLAG_CFRAME = 0x0080,
|
|
1163
1179
|
VM_FRAME_FLAG_LAMBDA = 0x0100,
|
|
1164
1180
|
VM_FRAME_FLAG_MODIFIED_BLOCK_PARAM = 0x0200,
|
|
1165
1181
|
VM_FRAME_FLAG_CFRAME_KW = 0x0400,
|
|
1182
|
+
VM_FRAME_FLAG_PASSED = 0x0800,
|
|
1166
1183
|
|
|
1167
1184
|
/* env flag */
|
|
1168
1185
|
VM_ENV_FLAG_LOCAL = 0x0002,
|
|
1169
1186
|
VM_ENV_FLAG_ESCAPED = 0x0004,
|
|
1170
|
-
VM_ENV_FLAG_WB_REQUIRED = 0x0008
|
|
1187
|
+
VM_ENV_FLAG_WB_REQUIRED = 0x0008,
|
|
1188
|
+
VM_ENV_FLAG_ISOLATED = 0x0010,
|
|
1171
1189
|
};
|
|
1172
1190
|
|
|
1173
1191
|
#define VM_ENV_DATA_SIZE ( 3)
|
|
@@ -1614,7 +1632,7 @@ extern void rb_vmdebug_debug_print_post(const rb_execution_context_t *ec, const
|
|
|
1614
1632
|
#define SDR() rb_vmdebug_stack_dump_raw(GET_EC(), GET_EC()->cfp)
|
|
1615
1633
|
#define SDR2(cfp) rb_vmdebug_stack_dump_raw(GET_EC(), (cfp))
|
|
1616
1634
|
void rb_vm_bugreport(const void *);
|
|
1617
|
-
typedef
|
|
1635
|
+
typedef void (*ruby_sighandler_t)(int);
|
|
1618
1636
|
NORETURN(void rb_bug_for_fatal_signal(ruby_sighandler_t default_sighandler, int sig, const void *, const char *fmt, ...));
|
|
1619
1637
|
|
|
1620
1638
|
/* functions about thread/vm execution */
|
|
@@ -1716,13 +1734,12 @@ rb_execution_context_t *rb_vm_main_ractor_ec(rb_vm_t *vm); // ractor.c
|
|
|
1716
1734
|
#if RUBY_VM_THREAD_MODEL == 2
|
|
1717
1735
|
RUBY_SYMBOL_EXPORT_BEGIN
|
|
1718
1736
|
|
|
1737
|
+
RUBY_EXTERN struct rb_ractor_struct *ruby_single_main_ractor; // ractor.c
|
|
1719
1738
|
RUBY_EXTERN rb_vm_t *ruby_current_vm_ptr;
|
|
1720
1739
|
RUBY_EXTERN rb_event_flag_t ruby_vm_event_flags;
|
|
1721
1740
|
RUBY_EXTERN rb_event_flag_t ruby_vm_event_enabled_global_flags;
|
|
1722
1741
|
RUBY_EXTERN unsigned int ruby_vm_event_local_num;
|
|
1723
1742
|
|
|
1724
|
-
RUBY_EXTERN native_tls_key_t ruby_current_ec_key;
|
|
1725
|
-
|
|
1726
1743
|
RUBY_SYMBOL_EXPORT_END
|
|
1727
1744
|
|
|
1728
1745
|
#define GET_VM() rb_current_vm()
|
|
@@ -1764,7 +1781,15 @@ rb_ec_vm_ptr(const rb_execution_context_t *ec)
|
|
|
1764
1781
|
static inline rb_execution_context_t *
|
|
1765
1782
|
rb_current_execution_context(void)
|
|
1766
1783
|
{
|
|
1784
|
+
#ifdef RB_THREAD_LOCAL_SPECIFIER
|
|
1785
|
+
#if __APPLE__
|
|
1786
|
+
rb_execution_context_t *ec = rb_current_ec();
|
|
1787
|
+
#else
|
|
1788
|
+
rb_execution_context_t *ec = ruby_current_ec;
|
|
1789
|
+
#endif
|
|
1790
|
+
#else
|
|
1767
1791
|
rb_execution_context_t *ec = native_tls_get(ruby_current_ec_key);
|
|
1792
|
+
#endif
|
|
1768
1793
|
VM_ASSERT(ec != NULL);
|
|
1769
1794
|
return ec;
|
|
1770
1795
|
}
|
|
@@ -1779,8 +1804,13 @@ rb_current_thread(void)
|
|
|
1779
1804
|
static inline rb_ractor_t *
|
|
1780
1805
|
rb_current_ractor(void)
|
|
1781
1806
|
{
|
|
1782
|
-
|
|
1783
|
-
|
|
1807
|
+
if (ruby_single_main_ractor) {
|
|
1808
|
+
return ruby_single_main_ractor;
|
|
1809
|
+
}
|
|
1810
|
+
else {
|
|
1811
|
+
const rb_execution_context_t *ec = GET_EC();
|
|
1812
|
+
return rb_ec_ractor_ptr(ec);
|
|
1813
|
+
}
|
|
1784
1814
|
}
|
|
1785
1815
|
|
|
1786
1816
|
static inline rb_vm_t *
|
|
@@ -1797,6 +1827,23 @@ rb_current_vm(void)
|
|
|
1797
1827
|
return ruby_current_vm_ptr;
|
|
1798
1828
|
}
|
|
1799
1829
|
|
|
1830
|
+
void rb_ec_vm_lock_rec_release(const rb_execution_context_t *ec,
|
|
1831
|
+
unsigned int recorded_lock_rec,
|
|
1832
|
+
unsigned int current_lock_rec);
|
|
1833
|
+
|
|
1834
|
+
static inline unsigned int
|
|
1835
|
+
rb_ec_vm_lock_rec(const rb_execution_context_t *ec)
|
|
1836
|
+
{
|
|
1837
|
+
rb_vm_t *vm = rb_ec_vm_ptr(ec);
|
|
1838
|
+
|
|
1839
|
+
if (vm->ractor.sync.lock_owner != rb_ec_ractor_ptr(ec)) {
|
|
1840
|
+
return 0;
|
|
1841
|
+
}
|
|
1842
|
+
else {
|
|
1843
|
+
return vm->ractor.sync.lock_rec;
|
|
1844
|
+
}
|
|
1845
|
+
}
|
|
1846
|
+
|
|
1800
1847
|
#else
|
|
1801
1848
|
#error "unsupported thread model"
|
|
1802
1849
|
#endif
|
|
@@ -1818,7 +1865,20 @@ enum {
|
|
|
1818
1865
|
#define RUBY_VM_SET_VM_BARRIER_INTERRUPT(ec) ATOMIC_OR((ec)->interrupt_flag, VM_BARRIER_INTERRUPT_MASK)
|
|
1819
1866
|
#define RUBY_VM_INTERRUPTED(ec) ((ec)->interrupt_flag & ~(ec)->interrupt_mask & \
|
|
1820
1867
|
(PENDING_INTERRUPT_MASK|TRAP_INTERRUPT_MASK))
|
|
1821
|
-
|
|
1868
|
+
|
|
1869
|
+
static inline bool
|
|
1870
|
+
RUBY_VM_INTERRUPTED_ANY(rb_execution_context_t *ec)
|
|
1871
|
+
{
|
|
1872
|
+
#if USE_VM_CLOCK
|
|
1873
|
+
uint32_t current_clock = rb_ec_vm_ptr(ec)->clock;
|
|
1874
|
+
|
|
1875
|
+
if (current_clock != ec->checked_clock) {
|
|
1876
|
+
ec->checked_clock = current_clock;
|
|
1877
|
+
RUBY_VM_SET_TIMER_INTERRUPT(ec);
|
|
1878
|
+
}
|
|
1879
|
+
#endif
|
|
1880
|
+
return ec->interrupt_flag & ~(ec)->interrupt_mask;
|
|
1881
|
+
}
|
|
1822
1882
|
|
|
1823
1883
|
VALUE rb_exc_set_backtrace(VALUE exc, VALUE bt);
|
|
1824
1884
|
int rb_signal_buff_size(void);
|
|
@@ -1910,17 +1970,24 @@ rb_exec_event_hook_orig(rb_execution_context_t *ec, rb_hook_list_t *hooks, rb_ev
|
|
|
1910
1970
|
rb_exec_event_hooks(&trace_arg, hooks, pop_p);
|
|
1911
1971
|
}
|
|
1912
1972
|
|
|
1973
|
+
struct rb_ractor_pub {
|
|
1974
|
+
VALUE self;
|
|
1975
|
+
uint32_t id;
|
|
1976
|
+
rb_hook_list_t hooks;
|
|
1977
|
+
};
|
|
1978
|
+
|
|
1913
1979
|
static inline rb_hook_list_t *
|
|
1914
|
-
|
|
1980
|
+
rb_ec_ractor_hooks(const rb_execution_context_t *ec)
|
|
1915
1981
|
{
|
|
1916
|
-
|
|
1982
|
+
struct rb_ractor_pub *cr_pub = (struct rb_ractor_pub *)rb_ec_ractor_ptr(ec);
|
|
1983
|
+
return &cr_pub->hooks;
|
|
1917
1984
|
}
|
|
1918
1985
|
|
|
1919
1986
|
#define EXEC_EVENT_HOOK(ec_, flag_, self_, id_, called_id_, klass_, data_) \
|
|
1920
|
-
EXEC_EVENT_HOOK_ORIG(ec_,
|
|
1987
|
+
EXEC_EVENT_HOOK_ORIG(ec_, rb_ec_ractor_hooks(ec_), flag_, self_, id_, called_id_, klass_, data_, 0)
|
|
1921
1988
|
|
|
1922
1989
|
#define EXEC_EVENT_HOOK_AND_POP_FRAME(ec_, flag_, self_, id_, called_id_, klass_, data_) \
|
|
1923
|
-
EXEC_EVENT_HOOK_ORIG(ec_,
|
|
1990
|
+
EXEC_EVENT_HOOK_ORIG(ec_, rb_ec_ractor_hooks(ec_), flag_, self_, id_, called_id_, klass_, data_, 1)
|
|
1924
1991
|
|
|
1925
1992
|
static inline void
|
|
1926
1993
|
rb_exec_event_hook_script_compiled(rb_execution_context_t *ec, const rb_iseq_t *iseq, VALUE eval_script)
|
|
@@ -1947,6 +2014,10 @@ extern void rb_reset_coverages(void);
|
|
|
1947
2014
|
|
|
1948
2015
|
void rb_postponed_job_flush(rb_vm_t *vm);
|
|
1949
2016
|
|
|
2017
|
+
// ractor.c
|
|
2018
|
+
RUBY_EXTERN VALUE rb_eRactorUnsafeError;
|
|
2019
|
+
RUBY_EXTERN VALUE rb_eRactorIsolationError;
|
|
2020
|
+
|
|
1950
2021
|
RUBY_SYMBOL_EXPORT_END
|
|
1951
2022
|
|
|
1952
2023
|
#endif /* RUBY_VM_CORE_H */
|