debase-ruby_core_source 0.10.11 → 0.10.12
Sign up to get free protection for your applications and to get access to all the features.
- 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 */
|