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
|
@@ -273,8 +273,8 @@ typedef struct RNode {
|
|
|
273
273
|
|
|
274
274
|
#define nd_brace u2.argc
|
|
275
275
|
|
|
276
|
-
#define
|
|
277
|
-
#define
|
|
276
|
+
#define nd_pconst u1.node
|
|
277
|
+
#define nd_pkwargs u2.node
|
|
278
278
|
#define nd_pkwrestarg u3.node
|
|
279
279
|
|
|
280
280
|
#define nd_apinfo u3.apinfo
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1/ractor.h → ruby-3.0.0-p0/ractor_core.h}
RENAMED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
#include "ruby/ruby.h"
|
|
2
|
+
#include "ruby/ractor.h"
|
|
2
3
|
#include "vm_core.h"
|
|
3
4
|
#include "id_table.h"
|
|
4
5
|
#include "vm_debug.h"
|
|
5
|
-
#include "ractor_pub.h"
|
|
6
6
|
|
|
7
7
|
#ifndef RACTOR_CHECK_MODE
|
|
8
8
|
#define RACTOR_CHECK_MODE (0 || VM_CHECK_MODE || RUBY_DEBUG)
|
|
@@ -10,14 +10,16 @@
|
|
|
10
10
|
|
|
11
11
|
enum rb_ractor_basket_type {
|
|
12
12
|
basket_type_none,
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
basket_type_copy_custom,
|
|
13
|
+
basket_type_ref,
|
|
14
|
+
basket_type_copy,
|
|
16
15
|
basket_type_move,
|
|
17
|
-
|
|
16
|
+
basket_type_will,
|
|
17
|
+
basket_type_deleted,
|
|
18
|
+
basket_type_reserved,
|
|
18
19
|
};
|
|
19
20
|
|
|
20
21
|
struct rb_ractor_basket {
|
|
22
|
+
bool exception;
|
|
21
23
|
enum rb_ractor_basket_type type;
|
|
22
24
|
VALUE v;
|
|
23
25
|
VALUE sender;
|
|
@@ -25,8 +27,11 @@ struct rb_ractor_basket {
|
|
|
25
27
|
|
|
26
28
|
struct rb_ractor_queue {
|
|
27
29
|
struct rb_ractor_basket *baskets;
|
|
30
|
+
int start;
|
|
28
31
|
int cnt;
|
|
29
32
|
int size;
|
|
33
|
+
unsigned int serial;
|
|
34
|
+
unsigned int reserved_cnt;
|
|
30
35
|
};
|
|
31
36
|
|
|
32
37
|
struct rb_ractor_waiting_list {
|
|
@@ -35,28 +40,27 @@ struct rb_ractor_waiting_list {
|
|
|
35
40
|
rb_ractor_t **ractors;
|
|
36
41
|
};
|
|
37
42
|
|
|
38
|
-
struct
|
|
43
|
+
struct rb_ractor_sync {
|
|
39
44
|
// ractor lock
|
|
40
45
|
rb_nativethread_lock_t lock;
|
|
41
46
|
#if RACTOR_CHECK_MODE > 0
|
|
42
47
|
VALUE locked_by;
|
|
43
48
|
#endif
|
|
49
|
+
rb_nativethread_cond_t cond;
|
|
44
50
|
|
|
45
51
|
// communication
|
|
46
52
|
struct rb_ractor_queue incoming_queue;
|
|
53
|
+
struct rb_ractor_waiting_list taking_ractors;
|
|
47
54
|
|
|
48
55
|
bool incoming_port_closed;
|
|
49
56
|
bool outgoing_port_closed;
|
|
50
|
-
bool yield_atexit;
|
|
51
|
-
|
|
52
|
-
struct rb_ractor_waiting_list taking_ractors;
|
|
53
57
|
|
|
54
58
|
struct ractor_wait {
|
|
55
59
|
enum ractor_wait_status {
|
|
56
|
-
wait_none
|
|
57
|
-
|
|
58
|
-
wait_taking
|
|
59
|
-
wait_yielding
|
|
60
|
+
wait_none = 0x00,
|
|
61
|
+
wait_receiving = 0x01,
|
|
62
|
+
wait_taking = 0x02,
|
|
63
|
+
wait_yielding = 0x04,
|
|
60
64
|
} status;
|
|
61
65
|
|
|
62
66
|
enum ractor_wakeup_status {
|
|
@@ -69,11 +73,17 @@ struct rb_ractor_struct {
|
|
|
69
73
|
wakeup_by_retry,
|
|
70
74
|
} wakeup_status;
|
|
71
75
|
|
|
72
|
-
struct rb_ractor_basket taken_basket;
|
|
73
76
|
struct rb_ractor_basket yielded_basket;
|
|
74
|
-
|
|
75
|
-
rb_nativethread_cond_t cond;
|
|
77
|
+
struct rb_ractor_basket taken_basket;
|
|
76
78
|
} wait;
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
struct rb_ractor_struct {
|
|
82
|
+
struct rb_ractor_pub pub;
|
|
83
|
+
|
|
84
|
+
struct rb_ractor_sync sync;
|
|
85
|
+
VALUE receiving_mutex;
|
|
86
|
+
bool yield_atexit;
|
|
77
87
|
|
|
78
88
|
// vm wide barrier synchronization
|
|
79
89
|
rb_nativethread_cond_t barrier_wait_cond;
|
|
@@ -90,9 +100,6 @@ struct rb_ractor_struct {
|
|
|
90
100
|
} threads;
|
|
91
101
|
VALUE thgroup_default;
|
|
92
102
|
|
|
93
|
-
// identity
|
|
94
|
-
VALUE self;
|
|
95
|
-
uint32_t id;
|
|
96
103
|
VALUE name;
|
|
97
104
|
VALUE loc;
|
|
98
105
|
|
|
@@ -120,19 +127,42 @@ struct rb_ractor_struct {
|
|
|
120
127
|
|
|
121
128
|
struct list_node vmlr_node;
|
|
122
129
|
|
|
130
|
+
// ractor local data
|
|
131
|
+
|
|
132
|
+
st_table *local_storage;
|
|
133
|
+
struct rb_id_table *idkey_local_storage;
|
|
123
134
|
|
|
124
135
|
VALUE r_stdin;
|
|
125
136
|
VALUE r_stdout;
|
|
126
137
|
VALUE r_stderr;
|
|
138
|
+
VALUE verbose;
|
|
139
|
+
VALUE debug;
|
|
140
|
+
|
|
141
|
+
struct {
|
|
142
|
+
struct RVALUE *freelist;
|
|
143
|
+
struct heap_page *using_page;
|
|
144
|
+
} newobj_cache;
|
|
145
|
+
|
|
146
|
+
// gc.c rb_objspace_reachable_objects_from
|
|
147
|
+
struct gc_mark_func_data_struct {
|
|
148
|
+
void *data;
|
|
149
|
+
void (*mark_func)(VALUE v, void *data);
|
|
150
|
+
} *mfd;
|
|
127
151
|
}; // rb_ractor_t is defined in vm_core.h
|
|
128
152
|
|
|
153
|
+
|
|
154
|
+
static inline VALUE
|
|
155
|
+
rb_ractor_self(const rb_ractor_t *r)
|
|
156
|
+
{
|
|
157
|
+
return r->pub.self;
|
|
158
|
+
}
|
|
159
|
+
|
|
129
160
|
rb_ractor_t *rb_ractor_main_alloc(void);
|
|
130
161
|
void rb_ractor_main_setup(rb_vm_t *vm, rb_ractor_t *main_ractor, rb_thread_t *main_thread);
|
|
131
|
-
VALUE rb_ractor_self(const rb_ractor_t *g);
|
|
132
162
|
void rb_ractor_atexit(rb_execution_context_t *ec, VALUE result);
|
|
133
163
|
void rb_ractor_atexit_exception(rb_execution_context_t *ec);
|
|
134
164
|
void rb_ractor_teardown(rb_execution_context_t *ec);
|
|
135
|
-
void
|
|
165
|
+
void rb_ractor_receive_parameters(rb_execution_context_t *ec, rb_ractor_t *g, int len, VALUE *ptr);
|
|
136
166
|
void rb_ractor_send_parameters(rb_execution_context_t *ec, rb_ractor_t *g, VALUE args);
|
|
137
167
|
|
|
138
168
|
VALUE rb_thread_create_ractor(rb_ractor_t *g, VALUE args, VALUE proc); // defined in thread.c
|
|
@@ -150,6 +180,31 @@ void rb_ractor_blocking_threads_dec(rb_ractor_t *r, const char *file, int line);
|
|
|
150
180
|
void rb_ractor_vm_barrier_interrupt_running_thread(rb_ractor_t *r);
|
|
151
181
|
void rb_ractor_terminate_interrupt_main_thread(rb_ractor_t *r);
|
|
152
182
|
void rb_ractor_terminate_all(void);
|
|
183
|
+
bool rb_ractor_main_p_(void);
|
|
184
|
+
void rb_ractor_finish_marking(void);
|
|
185
|
+
void rb_ractor_atfork(rb_vm_t *vm, rb_thread_t *th);
|
|
186
|
+
|
|
187
|
+
VALUE rb_ractor_ensure_shareable(VALUE obj, VALUE name);
|
|
188
|
+
|
|
189
|
+
RUBY_SYMBOL_EXPORT_BEGIN
|
|
190
|
+
bool rb_ractor_shareable_p_continue(VALUE obj);
|
|
191
|
+
|
|
192
|
+
// THIS FUNCTION SHOULD NOT CALL WHILE INCREMENTAL MARKING!!
|
|
193
|
+
// This function is for T_DATA::free_func
|
|
194
|
+
void rb_ractor_local_storage_delkey(rb_ractor_local_key_t key);
|
|
195
|
+
|
|
196
|
+
RUBY_SYMBOL_EXPORT_END
|
|
197
|
+
|
|
198
|
+
static inline bool
|
|
199
|
+
rb_ractor_main_p(void)
|
|
200
|
+
{
|
|
201
|
+
if (ruby_single_main_ractor) {
|
|
202
|
+
return true;
|
|
203
|
+
}
|
|
204
|
+
else {
|
|
205
|
+
return rb_ractor_main_p_();
|
|
206
|
+
}
|
|
207
|
+
}
|
|
153
208
|
|
|
154
209
|
static inline bool
|
|
155
210
|
rb_ractor_status_p(rb_ractor_t *r, enum ractor_status status)
|
|
@@ -204,7 +259,15 @@ rb_ractor_thread_switch(rb_ractor_t *cr, rb_thread_t *th)
|
|
|
204
259
|
static inline void
|
|
205
260
|
rb_ractor_set_current_ec(rb_ractor_t *cr, rb_execution_context_t *ec)
|
|
206
261
|
{
|
|
262
|
+
#ifdef RB_THREAD_LOCAL_SPECIFIER
|
|
263
|
+
#if __APPLE__
|
|
264
|
+
rb_current_ec_set(ec);
|
|
265
|
+
#else
|
|
266
|
+
ruby_current_ec = ec;
|
|
267
|
+
#endif
|
|
268
|
+
#else
|
|
207
269
|
native_tls_set(ruby_current_ec_key, ec);
|
|
270
|
+
#endif
|
|
208
271
|
|
|
209
272
|
if (cr->threads.running_ec != ec) {
|
|
210
273
|
if (0) fprintf(stderr, "rb_ractor_set_current_ec ec:%p->%p\n",
|
|
@@ -220,7 +283,11 @@ rb_ractor_set_current_ec(rb_ractor_t *cr, rb_execution_context_t *ec)
|
|
|
220
283
|
void rb_vm_ractor_blocking_cnt_inc(rb_vm_t *vm, rb_ractor_t *cr, const char *file, int line);
|
|
221
284
|
void rb_vm_ractor_blocking_cnt_dec(rb_vm_t *vm, rb_ractor_t *cr, const char *file, int line);
|
|
222
285
|
|
|
223
|
-
|
|
286
|
+
static inline uint32_t
|
|
287
|
+
rb_ractor_id(const rb_ractor_t *r)
|
|
288
|
+
{
|
|
289
|
+
return r->pub.id;
|
|
290
|
+
}
|
|
224
291
|
|
|
225
292
|
#if RACTOR_CHECK_MODE > 0
|
|
226
293
|
uint32_t rb_ractor_current_id(void);
|
|
@@ -241,7 +308,7 @@ rb_ractor_setup_belonging(VALUE obj)
|
|
|
241
308
|
static inline uint32_t
|
|
242
309
|
rb_ractor_belonging(VALUE obj)
|
|
243
310
|
{
|
|
244
|
-
if (
|
|
311
|
+
if (SPECIAL_CONST_P(obj) || RB_OBJ_SHAREABLE_P(obj)) {
|
|
245
312
|
return 0;
|
|
246
313
|
}
|
|
247
314
|
else {
|
|
@@ -261,8 +328,13 @@ rb_ractor_confirm_belonging(VALUE obj)
|
|
|
261
328
|
}
|
|
262
329
|
}
|
|
263
330
|
else if (UNLIKELY(id != rb_ractor_current_id())) {
|
|
264
|
-
|
|
265
|
-
|
|
331
|
+
if (rb_ractor_shareable_p(obj)) {
|
|
332
|
+
// ok
|
|
333
|
+
}
|
|
334
|
+
else {
|
|
335
|
+
rp(obj);
|
|
336
|
+
rb_bug("rb_ractor_confirm_belonging object-ractor id:%u, current-ractor id:%u", id, rb_ractor_current_id());
|
|
337
|
+
}
|
|
266
338
|
}
|
|
267
339
|
return obj;
|
|
268
340
|
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
#include "ruby/atomic.h"
|
|
2
|
+
|
|
3
|
+
/* shim macros only */
|
|
4
|
+
#define ATOMIC_ADD(var, val) RUBY_ATOMIC_ADD(var, val)
|
|
5
|
+
#define ATOMIC_CAS(var, oldval, newval) RUBY_ATOMIC_CAS(var, oldval, newval)
|
|
6
|
+
#define ATOMIC_DEC(var) RUBY_ATOMIC_DEC(var)
|
|
7
|
+
#define ATOMIC_EXCHANGE(var, val) RUBY_ATOMIC_EXCHANGE(var, val)
|
|
8
|
+
#define ATOMIC_FETCH_ADD(var, val) RUBY_ATOMIC_FETCH_ADD(var, val)
|
|
9
|
+
#define ATOMIC_FETCH_SUB(var, val) RUBY_ATOMIC_FETCH_SUB(var, val)
|
|
10
|
+
#define ATOMIC_INC(var) RUBY_ATOMIC_INC(var)
|
|
11
|
+
#define ATOMIC_OR(var, val) RUBY_ATOMIC_OR(var, val)
|
|
12
|
+
#define ATOMIC_PTR_CAS(var, oldval, newval) RUBY_ATOMIC_PTR_CAS(var, oldval, newval)
|
|
13
|
+
#define ATOMIC_PTR_EXCHANGE(var, val) RUBY_ATOMIC_PTR_EXCHANGE(var, val)
|
|
14
|
+
#define ATOMIC_SET(var, val) RUBY_ATOMIC_SET(var, val)
|
|
15
|
+
#define ATOMIC_SIZE_ADD(var, val) RUBY_ATOMIC_SIZE_ADD(var, val)
|
|
16
|
+
#define ATOMIC_SIZE_CAS(var, oldval, newval) RUBY_ATOMIC_SIZE_CAS(var, oldval, newval)
|
|
17
|
+
#define ATOMIC_SIZE_DEC(var) RUBY_ATOMIC_SIZE_DEC(var)
|
|
18
|
+
#define ATOMIC_SIZE_EXCHANGE(var, val) RUBY_ATOMIC_SIZE_EXCHANGE(var, val)
|
|
19
|
+
#define ATOMIC_SIZE_INC(var) RUBY_ATOMIC_SIZE_INC(var)
|
|
20
|
+
#define ATOMIC_SIZE_SUB(var, val) RUBY_ATOMIC_SIZE_SUB(var, val)
|
|
21
|
+
#define ATOMIC_SUB(var, val) RUBY_ATOMIC_SUB(var, val)
|
|
22
|
+
#define ATOMIC_VALUE_CAS(var, oldval, val) RUBY_ATOMIC_VALUE_CAS(var, oldval, val)
|
|
23
|
+
#define ATOMIC_VALUE_EXCHANGE(var, val) RUBY_ATOMIC_VALUE_EXCHANGE(var, val)
|
|
File without changes
|
|
File without changes
|
|
@@ -17,8 +17,6 @@
|
|
|
17
17
|
#define RB_NATIVETHREAD_LOCK_INIT PTHREAD_MUTEX_INITIALIZER
|
|
18
18
|
#define RB_NATIVETHREAD_COND_INIT PTHREAD_COND_INITIALIZER
|
|
19
19
|
|
|
20
|
-
typedef pthread_cond_t rb_nativethread_cond_t;
|
|
21
|
-
|
|
22
20
|
typedef struct native_thread_data_struct {
|
|
23
21
|
union {
|
|
24
22
|
struct list_node ubf;
|
|
@@ -39,18 +37,6 @@ typedef struct native_thread_data_struct {
|
|
|
39
37
|
} cond;
|
|
40
38
|
} native_thread_data_t;
|
|
41
39
|
|
|
42
|
-
void rb_native_mutex_lock(rb_nativethread_lock_t *lock);
|
|
43
|
-
int rb_native_mutex_trylock(rb_nativethread_lock_t *lock);
|
|
44
|
-
void rb_native_mutex_unlock(rb_nativethread_lock_t *lock);
|
|
45
|
-
void rb_native_mutex_initialize(rb_nativethread_lock_t *lock);
|
|
46
|
-
void rb_native_mutex_destroy(rb_nativethread_lock_t *lock);
|
|
47
|
-
void rb_native_cond_signal(rb_nativethread_cond_t *cond);
|
|
48
|
-
void rb_native_cond_broadcast(rb_nativethread_cond_t *cond);
|
|
49
|
-
void rb_native_cond_wait(rb_nativethread_cond_t *cond, rb_nativethread_lock_t *mutex);
|
|
50
|
-
void rb_native_cond_timedwait(rb_nativethread_cond_t *cond, rb_nativethread_lock_t *mutex, unsigned long msec);
|
|
51
|
-
void rb_native_cond_initialize(rb_nativethread_cond_t *cond);
|
|
52
|
-
void rb_native_cond_destroy(rb_nativethread_cond_t *cond);
|
|
53
|
-
|
|
54
40
|
#undef except
|
|
55
41
|
#undef try
|
|
56
42
|
#undef leave
|
|
@@ -83,6 +69,14 @@ typedef struct rb_global_vm_lock_struct {
|
|
|
83
69
|
int wait_yield;
|
|
84
70
|
} rb_global_vm_lock_t;
|
|
85
71
|
|
|
72
|
+
|
|
73
|
+
#if __STDC_VERSION__ >= 201112
|
|
74
|
+
#define RB_THREAD_LOCAL_SPECIFIER _Thread_local
|
|
75
|
+
#elif defined(__GNUC__)
|
|
76
|
+
/* note that ICC (linux) and Clang are covered by __GNUC__ */
|
|
77
|
+
#define RB_THREAD_LOCAL_SPECIFIER __thread
|
|
78
|
+
#else
|
|
79
|
+
|
|
86
80
|
typedef pthread_key_t native_tls_key_t;
|
|
87
81
|
|
|
88
82
|
static inline void *
|
|
@@ -102,5 +96,20 @@ native_tls_set(native_tls_key_t key, void *ptr)
|
|
|
102
96
|
rb_bug("pthread_setspecific error");
|
|
103
97
|
}
|
|
104
98
|
}
|
|
99
|
+
#endif
|
|
100
|
+
|
|
101
|
+
RUBY_SYMBOL_EXPORT_BEGIN
|
|
102
|
+
#ifdef RB_THREAD_LOCAL_SPECIFIER
|
|
103
|
+
#if __APPLE__
|
|
104
|
+
// on Darwin, TLS can not be accessed across .so
|
|
105
|
+
struct rb_execution_context_struct *rb_current_ec();
|
|
106
|
+
void rb_current_ec_set(struct rb_execution_context_struct *);
|
|
107
|
+
#else
|
|
108
|
+
RUBY_EXTERN RB_THREAD_LOCAL_SPECIFIER struct rb_execution_context_struct *ruby_current_ec;
|
|
109
|
+
#endif
|
|
110
|
+
#else
|
|
111
|
+
RUBY_EXTERN native_tls_key_t ruby_current_ec_key;
|
|
112
|
+
#endif
|
|
113
|
+
RUBY_SYMBOL_EXPORT_END
|
|
105
114
|
|
|
106
115
|
#endif /* RUBY_THREAD_PTHREAD_H */
|
|
@@ -16,6 +16,8 @@
|
|
|
16
16
|
# undef _WIN32
|
|
17
17
|
# endif
|
|
18
18
|
|
|
19
|
+
#define USE_VM_CLOCK 1
|
|
20
|
+
|
|
19
21
|
WINBASEAPI BOOL WINAPI
|
|
20
22
|
TryEnterCriticalSection(IN OUT LPCRITICAL_SECTION lpCriticalSection);
|
|
21
23
|
|
|
@@ -52,15 +54,8 @@ native_tls_set(native_tls_key_t key, void *ptr)
|
|
|
52
54
|
}
|
|
53
55
|
}
|
|
54
56
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
void rb_native_mutex_destroy(rb_nativethread_lock_t *lock);
|
|
59
|
-
void rb_native_cond_signal(rb_nativethread_cond_t *cond);
|
|
60
|
-
void rb_native_cond_broadcast(rb_nativethread_cond_t *cond);
|
|
61
|
-
void rb_native_cond_wait(rb_nativethread_cond_t *cond, rb_nativethread_lock_t *mutex);
|
|
62
|
-
void rb_native_cond_timedwait(rb_nativethread_cond_t *cond, rb_nativethread_lock_t *mutex, unsigned long msec);
|
|
63
|
-
void rb_native_cond_initialize(rb_nativethread_cond_t *cond);
|
|
64
|
-
void rb_native_cond_destroy(rb_nativethread_cond_t *cond);
|
|
57
|
+
RUBY_SYMBOL_EXPORT_BEGIN
|
|
58
|
+
RUBY_EXTERN native_tls_key_t ruby_current_ec_key;
|
|
59
|
+
RUBY_SYMBOL_EXPORT_END
|
|
65
60
|
|
|
66
61
|
#endif /* RUBY_THREAD_WIN32_H */
|
|
File without changes
|
|
File without changes
|
|
@@ -31,6 +31,9 @@ void rb_transient_heap_start_marking(int full_marking);
|
|
|
31
31
|
void rb_transient_heap_finish_marking(void);
|
|
32
32
|
void rb_transient_heap_update_references(void);
|
|
33
33
|
|
|
34
|
+
/* used by ractor.c */
|
|
35
|
+
void rb_transient_heap_evacuate(void);
|
|
36
|
+
|
|
34
37
|
/* for debug API */
|
|
35
38
|
void rb_transient_heap_dump(void);
|
|
36
39
|
void rb_transient_heap_verify(void);
|
|
@@ -49,6 +52,7 @@ void rb_struct_transient_heap_evacuate(VALUE st, int promote);
|
|
|
49
52
|
#define rb_transient_heap_promote(obj) ((void)0)
|
|
50
53
|
#define rb_transient_heap_start_marking(full_marking) ((void)0)
|
|
51
54
|
#define rb_transient_heap_update_references() ((void)0)
|
|
55
|
+
#define rb_transient_heap_evacuate() ((void)0)
|
|
52
56
|
#define rb_transient_heap_finish_marking() ((void)0)
|
|
53
57
|
#define rb_transient_heap_mark(obj, ptr) ((void)0)
|
|
54
58
|
|
|
@@ -16,6 +16,7 @@ struct gen_ivtbl {
|
|
|
16
16
|
VALUE ivptr[FLEX_ARY_LEN];
|
|
17
17
|
};
|
|
18
18
|
|
|
19
|
-
|
|
19
|
+
int rb_ivar_generic_ivtbl_lookup(VALUE obj, struct gen_ivtbl **);
|
|
20
|
+
VALUE rb_ivar_generic_lookup_with_index(VALUE obj, ID id, uint32_t index);
|
|
20
21
|
|
|
21
22
|
#endif /* RUBY_TOPLEVEL_VARIABLE_H */
|
|
@@ -12,10 +12,10 @@
|
|
|
12
12
|
# define RUBY_VERSION_MINOR RUBY_API_VERSION_MINOR
|
|
13
13
|
#define RUBY_VERSION_TEENY 0
|
|
14
14
|
#define RUBY_RELEASE_DATE RUBY_RELEASE_YEAR_STR"-"RUBY_RELEASE_MONTH_STR"-"RUBY_RELEASE_DAY_STR
|
|
15
|
-
#define RUBY_PATCHLEVEL
|
|
15
|
+
#define RUBY_PATCHLEVEL 0
|
|
16
16
|
|
|
17
17
|
#define RUBY_RELEASE_YEAR 2020
|
|
18
|
-
#define RUBY_RELEASE_MONTH
|
|
18
|
+
#define RUBY_RELEASE_MONTH 12
|
|
19
19
|
#define RUBY_RELEASE_DAY 25
|
|
20
20
|
|
|
21
21
|
#include "ruby/version.h"
|
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
#endif
|
|
48
48
|
|
|
49
49
|
#if RUBY_PATCHLEVEL == -1
|
|
50
|
-
#define RUBY_PATCHLEVEL_STR "
|
|
50
|
+
#define RUBY_PATCHLEVEL_STR "dev"
|
|
51
51
|
#else
|
|
52
52
|
#define RUBY_PATCHLEVEL_STR "p"STRINGIZE(RUBY_PATCHLEVEL)
|
|
53
53
|
#endif
|
|
@@ -441,7 +441,7 @@ INSN_ENTRY(getinstancevariable)
|
|
|
441
441
|
# define NAME_OF_CURRENT_INSN getinstancevariable
|
|
442
442
|
# line 215 "insns.def"
|
|
443
443
|
{
|
|
444
|
-
val = vm_getinstancevariable(GET_SELF(), id, ic);
|
|
444
|
+
val = vm_getinstancevariable(GET_ISEQ(), GET_SELF(), id, ic);
|
|
445
445
|
}
|
|
446
446
|
# line 447 "vm.inc"
|
|
447
447
|
# undef NAME_OF_CURRENT_INSN
|
|
@@ -485,7 +485,7 @@ INSN_ENTRY(setinstancevariable)
|
|
|
485
485
|
# define NAME_OF_CURRENT_INSN setinstancevariable
|
|
486
486
|
# line 226 "insns.def"
|
|
487
487
|
{
|
|
488
|
-
vm_setinstancevariable(GET_SELF(), id, val, ic);
|
|
488
|
+
vm_setinstancevariable(GET_ISEQ(), GET_SELF(), id, val, ic);
|
|
489
489
|
}
|
|
490
490
|
# line 491 "vm.inc"
|
|
491
491
|
# undef NAME_OF_CURRENT_INSN
|
|
@@ -928,7 +928,7 @@ INSN_ENTRY(putstring)
|
|
|
928
928
|
# define NAME_OF_CURRENT_INSN putstring
|
|
929
929
|
# line 365 "insns.def"
|
|
930
930
|
{
|
|
931
|
-
val =
|
|
931
|
+
val = rb_ec_str_resurrect(ec, str);
|
|
932
932
|
}
|
|
933
933
|
# line 934 "vm.inc"
|
|
934
934
|
# undef NAME_OF_CURRENT_INSN
|
|
@@ -1140,7 +1140,7 @@ INSN_ENTRY(newarray)
|
|
|
1140
1140
|
# define NAME_OF_CURRENT_INSN newarray
|
|
1141
1141
|
# line 428 "insns.def"
|
|
1142
1142
|
{
|
|
1143
|
-
val =
|
|
1143
|
+
val = rb_ec_ary_new_from_values(ec, num, STACK_ADDR_FROM_TOP(num));
|
|
1144
1144
|
}
|
|
1145
1145
|
# line 1146 "vm.inc"
|
|
1146
1146
|
# undef NAME_OF_CURRENT_INSN
|
|
@@ -2162,7 +2162,7 @@ INSN_ENTRY(send)
|
|
|
2162
2162
|
# line 768 "insns.def"
|
|
2163
2163
|
{
|
|
2164
2164
|
VALUE bh = vm_caller_setup_arg_block(ec, GET_CFP(), cd->ci, blockiseq, false);
|
|
2165
|
-
val = vm_sendish(ec, GET_CFP(), cd, bh,
|
|
2165
|
+
val = vm_sendish(ec, GET_CFP(), cd, bh, mexp_search_method);
|
|
2166
2166
|
|
|
2167
2167
|
if (val == Qundef) {
|
|
2168
2168
|
RESTORE_REGS();
|
|
@@ -2208,7 +2208,7 @@ INSN_ENTRY(opt_send_without_block)
|
|
|
2208
2208
|
# line 787 "insns.def"
|
|
2209
2209
|
{
|
|
2210
2210
|
VALUE bh = VM_BLOCK_HANDLER_NONE;
|
|
2211
|
-
val = vm_sendish(ec, GET_CFP(), cd, bh,
|
|
2211
|
+
val = vm_sendish(ec, GET_CFP(), cd, bh, mexp_search_method);
|
|
2212
2212
|
|
|
2213
2213
|
if (val == Qundef) {
|
|
2214
2214
|
RESTORE_REGS();
|
|
@@ -2485,7 +2485,7 @@ INSN_ENTRY(invokesuper)
|
|
|
2485
2485
|
# line 874 "insns.def"
|
|
2486
2486
|
{
|
|
2487
2487
|
VALUE bh = vm_caller_setup_arg_block(ec, GET_CFP(), cd->ci, blockiseq, true);
|
|
2488
|
-
val = vm_sendish(ec, GET_CFP(), cd, bh,
|
|
2488
|
+
val = vm_sendish(ec, GET_CFP(), cd, bh, mexp_search_super);
|
|
2489
2489
|
|
|
2490
2490
|
if (val == Qundef) {
|
|
2491
2491
|
RESTORE_REGS();
|
|
@@ -2530,20 +2530,15 @@ INSN_ENTRY(invokeblock)
|
|
|
2530
2530
|
# define NAME_OF_CURRENT_INSN invokeblock
|
|
2531
2531
|
# line 893 "insns.def"
|
|
2532
2532
|
{
|
|
2533
|
-
if (UNLIKELY(vm_cc_call(cd->cc) != vm_invokeblock_i)) {
|
|
2534
|
-
const struct rb_callcache *cc = vm_cc_new(0, NULL, vm_invokeblock_i);
|
|
2535
|
-
RB_OBJ_WRITE(GET_ISEQ(), &cd->cc, cc);
|
|
2536
|
-
}
|
|
2537
|
-
|
|
2538
2533
|
VALUE bh = VM_BLOCK_HANDLER_NONE;
|
|
2539
|
-
val = vm_sendish(ec, GET_CFP(), cd, bh,
|
|
2534
|
+
val = vm_sendish(ec, GET_CFP(), cd, bh, mexp_search_invokeblock);
|
|
2540
2535
|
|
|
2541
2536
|
if (val == Qundef) {
|
|
2542
2537
|
RESTORE_REGS();
|
|
2543
2538
|
NEXT_INSN();
|
|
2544
2539
|
}
|
|
2545
2540
|
}
|
|
2546
|
-
# line
|
|
2541
|
+
# line 2542 "vm.inc"
|
|
2547
2542
|
# undef NAME_OF_CURRENT_INSN
|
|
2548
2543
|
|
|
2549
2544
|
/* ### Instruction trailers. ### */
|
|
@@ -2577,7 +2572,7 @@ INSN_ENTRY(leave)
|
|
|
2577
2572
|
|
|
2578
2573
|
/* ### Here we do the instruction body. ### */
|
|
2579
2574
|
# define NAME_OF_CURRENT_INSN leave
|
|
2580
|
-
# line
|
|
2575
|
+
# line 914 "insns.def"
|
|
2581
2576
|
{
|
|
2582
2577
|
if (OPT_CHECKED_RUN) {
|
|
2583
2578
|
const VALUE *const bp = vm_base_ptr(GET_CFP());
|
|
@@ -2598,7 +2593,7 @@ INSN_ENTRY(leave)
|
|
|
2598
2593
|
RESTORE_REGS();
|
|
2599
2594
|
}
|
|
2600
2595
|
}
|
|
2601
|
-
# line
|
|
2596
|
+
# line 2597 "vm.inc"
|
|
2602
2597
|
# undef NAME_OF_CURRENT_INSN
|
|
2603
2598
|
|
|
2604
2599
|
/* ### Instruction trailers. ### */
|
|
@@ -2634,13 +2629,13 @@ INSN_ENTRY(throw)
|
|
|
2634
2629
|
|
|
2635
2630
|
/* ### Here we do the instruction body. ### */
|
|
2636
2631
|
# define NAME_OF_CURRENT_INSN throw
|
|
2637
|
-
# line
|
|
2632
|
+
# line 947 "insns.def"
|
|
2638
2633
|
{
|
|
2639
2634
|
val = vm_throw(ec, GET_CFP(), throw_state, throwobj);
|
|
2640
2635
|
THROW_EXCEPTION(val);
|
|
2641
2636
|
/* unreachable */
|
|
2642
2637
|
}
|
|
2643
|
-
# line
|
|
2638
|
+
# line 2639 "vm.inc"
|
|
2644
2639
|
# undef NAME_OF_CURRENT_INSN
|
|
2645
2640
|
|
|
2646
2641
|
/* ### Instruction trailers. ### */
|
|
@@ -2677,12 +2672,12 @@ INSN_ENTRY(jump)
|
|
|
2677
2672
|
|
|
2678
2673
|
/* ### Here we do the instruction body. ### */
|
|
2679
2674
|
# define NAME_OF_CURRENT_INSN jump
|
|
2680
|
-
# line
|
|
2675
|
+
# line 965 "insns.def"
|
|
2681
2676
|
{
|
|
2682
2677
|
RUBY_VM_CHECK_INTS(ec);
|
|
2683
2678
|
JUMP(dst);
|
|
2684
2679
|
}
|
|
2685
|
-
# line
|
|
2680
|
+
# line 2681 "vm.inc"
|
|
2686
2681
|
# undef NAME_OF_CURRENT_INSN
|
|
2687
2682
|
|
|
2688
2683
|
/* ### Instruction trailers. ### */
|
|
@@ -2717,14 +2712,14 @@ INSN_ENTRY(branchif)
|
|
|
2717
2712
|
|
|
2718
2713
|
/* ### Here we do the instruction body. ### */
|
|
2719
2714
|
# define NAME_OF_CURRENT_INSN branchif
|
|
2720
|
-
# line
|
|
2715
|
+
# line 978 "insns.def"
|
|
2721
2716
|
{
|
|
2722
2717
|
if (RTEST(val)) {
|
|
2723
2718
|
RUBY_VM_CHECK_INTS(ec);
|
|
2724
2719
|
JUMP(dst);
|
|
2725
2720
|
}
|
|
2726
2721
|
}
|
|
2727
|
-
# line
|
|
2722
|
+
# line 2723 "vm.inc"
|
|
2728
2723
|
# undef NAME_OF_CURRENT_INSN
|
|
2729
2724
|
|
|
2730
2725
|
/* ### Instruction trailers. ### */
|
|
@@ -2759,14 +2754,14 @@ INSN_ENTRY(branchunless)
|
|
|
2759
2754
|
|
|
2760
2755
|
/* ### Here we do the instruction body. ### */
|
|
2761
2756
|
# define NAME_OF_CURRENT_INSN branchunless
|
|
2762
|
-
# line
|
|
2757
|
+
# line 993 "insns.def"
|
|
2763
2758
|
{
|
|
2764
2759
|
if (!RTEST(val)) {
|
|
2765
2760
|
RUBY_VM_CHECK_INTS(ec);
|
|
2766
2761
|
JUMP(dst);
|
|
2767
2762
|
}
|
|
2768
2763
|
}
|
|
2769
|
-
# line
|
|
2764
|
+
# line 2765 "vm.inc"
|
|
2770
2765
|
# undef NAME_OF_CURRENT_INSN
|
|
2771
2766
|
|
|
2772
2767
|
/* ### Instruction trailers. ### */
|
|
@@ -2801,14 +2796,14 @@ INSN_ENTRY(branchnil)
|
|
|
2801
2796
|
|
|
2802
2797
|
/* ### Here we do the instruction body. ### */
|
|
2803
2798
|
# define NAME_OF_CURRENT_INSN branchnil
|
|
2804
|
-
# line
|
|
2799
|
+
# line 1008 "insns.def"
|
|
2805
2800
|
{
|
|
2806
2801
|
if (NIL_P(val)) {
|
|
2807
2802
|
RUBY_VM_CHECK_INTS(ec);
|
|
2808
2803
|
JUMP(dst);
|
|
2809
2804
|
}
|
|
2810
2805
|
}
|
|
2811
|
-
# line
|
|
2806
|
+
# line 2807 "vm.inc"
|
|
2812
2807
|
# undef NAME_OF_CURRENT_INSN
|
|
2813
2808
|
|
|
2814
2809
|
/* ### Instruction trailers. ### */
|
|
@@ -2845,9 +2840,9 @@ INSN_ENTRY(opt_getinlinecache)
|
|
|
2845
2840
|
|
|
2846
2841
|
/* ### Here we do the instruction body. ### */
|
|
2847
2842
|
# define NAME_OF_CURRENT_INSN opt_getinlinecache
|
|
2848
|
-
# line
|
|
2843
|
+
# line 1025 "insns.def"
|
|
2849
2844
|
{
|
|
2850
|
-
if (vm_ic_hit_p(ic, GET_EP())) {
|
|
2845
|
+
if (vm_ic_hit_p(ic->ic_serial, ic->ic_cref, GET_EP())) {
|
|
2851
2846
|
val = ic->value;
|
|
2852
2847
|
JUMP(dst);
|
|
2853
2848
|
}
|
|
@@ -2855,7 +2850,7 @@ INSN_ENTRY(opt_getinlinecache)
|
|
|
2855
2850
|
val = Qnil;
|
|
2856
2851
|
}
|
|
2857
2852
|
}
|
|
2858
|
-
# line
|
|
2853
|
+
# line 2854 "vm.inc"
|
|
2859
2854
|
# undef NAME_OF_CURRENT_INSN
|
|
2860
2855
|
|
|
2861
2856
|
/* ### Instruction trailers. ### */
|
|
@@ -2893,11 +2888,11 @@ INSN_ENTRY(opt_setinlinecache)
|
|
|
2893
2888
|
|
|
2894
2889
|
/* ### Here we do the instruction body. ### */
|
|
2895
2890
|
# define NAME_OF_CURRENT_INSN opt_setinlinecache
|
|
2896
|
-
# line
|
|
2891
|
+
# line 1041 "insns.def"
|
|
2897
2892
|
{
|
|
2898
2893
|
vm_ic_update(ic, val, GET_EP());
|
|
2899
2894
|
}
|
|
2900
|
-
# line
|
|
2895
|
+
# line 2896 "vm.inc"
|
|
2901
2896
|
# undef NAME_OF_CURRENT_INSN
|
|
2902
2897
|
|
|
2903
2898
|
/* ### Instruction trailers. ### */
|
|
@@ -2938,11 +2933,11 @@ INSN_ENTRY(once)
|
|
|
2938
2933
|
|
|
2939
2934
|
/* ### Here we do the instruction body. ### */
|
|
2940
2935
|
# define NAME_OF_CURRENT_INSN once
|
|
2941
|
-
# line
|
|
2936
|
+
# line 1051 "insns.def"
|
|
2942
2937
|
{
|
|
2943
2938
|
val = vm_once_dispatch(ec, iseq, ise);
|
|
2944
2939
|
}
|
|
2945
|
-
# line
|
|
2940
|
+
# line 2941 "vm.inc"
|
|
2946
2941
|
# undef NAME_OF_CURRENT_INSN
|
|
2947
2942
|
|
|
2948
2943
|
/* ### Instruction trailers. ### */
|
|
@@ -2979,7 +2974,7 @@ INSN_ENTRY(opt_case_dispatch)
|
|
|
2979
2974
|
|
|
2980
2975
|
/* ### Here we do the instruction body. ### */
|
|
2981
2976
|
# define NAME_OF_CURRENT_INSN opt_case_dispatch
|
|
2982
|
-
# line
|
|
2977
|
+
# line 1062 "insns.def"
|
|
2983
2978
|
{
|
|
2984
2979
|
OFFSET dst = vm_case_dispatch(hash, else_offset, key);
|
|
2985
2980
|
|
|
@@ -2987,7 +2982,7 @@ INSN_ENTRY(opt_case_dispatch)
|
|
|
2987
2982
|
JUMP(dst);
|
|
2988
2983
|
}
|
|
2989
2984
|
}
|
|
2990
|
-
# line
|
|
2985
|
+
# line 2986 "vm.inc"
|
|
2991
2986
|
# undef NAME_OF_CURRENT_INSN
|
|
2992
2987
|
|
|
2993
2988
|
/* ### Instruction trailers. ### */
|
|
@@ -3024,7 +3019,7 @@ INSN_ENTRY(opt_plus)
|
|
|
3024
3019
|
|
|
3025
3020
|
/* ### Here we do the instruction body. ### */
|
|
3026
3021
|
# define NAME_OF_CURRENT_INSN opt_plus
|
|
3027
|
-
# line
|
|
3022
|
+
# line 1078 "insns.def"
|
|
3028
3023
|
{
|
|
3029
3024
|
val = vm_opt_plus(recv, obj);
|
|
3030
3025
|
|
|
@@ -3032,7 +3027,7 @@ INSN_ENTRY(opt_plus)
|
|
|
3032
3027
|
CALL_SIMPLE_METHOD();
|
|
3033
3028
|
}
|
|
3034
3029
|
}
|
|
3035
|
-
# line
|
|
3030
|
+
# line 3031 "vm.inc"
|
|
3036
3031
|
# undef NAME_OF_CURRENT_INSN
|
|
3037
3032
|
|
|
3038
3033
|
/* ### Instruction trailers. ### */
|
|
@@ -3072,7 +3067,7 @@ INSN_ENTRY(opt_minus)
|
|
|
3072
3067
|
|
|
3073
3068
|
/* ### Here we do the instruction body. ### */
|
|
3074
3069
|
# define NAME_OF_CURRENT_INSN opt_minus
|
|
3075
|
-
# line
|
|
3070
|
+
# line 1092 "insns.def"
|
|
3076
3071
|
{
|
|
3077
3072
|
val = vm_opt_minus(recv, obj);
|
|
3078
3073
|
|
|
@@ -3080,7 +3075,7 @@ INSN_ENTRY(opt_minus)
|
|
|
3080
3075
|
CALL_SIMPLE_METHOD();
|
|
3081
3076
|
}
|
|
3082
3077
|
}
|
|
3083
|
-
# line
|
|
3078
|
+
# line 3079 "vm.inc"
|
|
3084
3079
|
# undef NAME_OF_CURRENT_INSN
|
|
3085
3080
|
|
|
3086
3081
|
/* ### Instruction trailers. ### */
|
|
@@ -3120,7 +3115,7 @@ INSN_ENTRY(opt_mult)
|
|
|
3120
3115
|
|
|
3121
3116
|
/* ### Here we do the instruction body. ### */
|
|
3122
3117
|
# define NAME_OF_CURRENT_INSN opt_mult
|
|
3123
|
-
# line
|
|
3118
|
+
# line 1106 "insns.def"
|
|
3124
3119
|
{
|
|
3125
3120
|
val = vm_opt_mult(recv, obj);
|
|
3126
3121
|
|
|
@@ -3128,7 +3123,7 @@ INSN_ENTRY(opt_mult)
|
|
|
3128
3123
|
CALL_SIMPLE_METHOD();
|
|
3129
3124
|
}
|
|
3130
3125
|
}
|
|
3131
|
-
# line
|
|
3126
|
+
# line 3127 "vm.inc"
|
|
3132
3127
|
# undef NAME_OF_CURRENT_INSN
|
|
3133
3128
|
|
|
3134
3129
|
/* ### Instruction trailers. ### */
|
|
@@ -3168,7 +3163,7 @@ INSN_ENTRY(opt_div)
|
|
|
3168
3163
|
|
|
3169
3164
|
/* ### Here we do the instruction body. ### */
|
|
3170
3165
|
# define NAME_OF_CURRENT_INSN opt_div
|
|
3171
|
-
# line
|
|
3166
|
+
# line 1123 "insns.def"
|
|
3172
3167
|
{
|
|
3173
3168
|
val = vm_opt_div(recv, obj);
|
|
3174
3169
|
|
|
@@ -3176,7 +3171,7 @@ INSN_ENTRY(opt_div)
|
|
|
3176
3171
|
CALL_SIMPLE_METHOD();
|
|
3177
3172
|
}
|
|
3178
3173
|
}
|
|
3179
|
-
# line
|
|
3174
|
+
# line 3175 "vm.inc"
|
|
3180
3175
|
# undef NAME_OF_CURRENT_INSN
|
|
3181
3176
|
|
|
3182
3177
|
/* ### Instruction trailers. ### */
|
|
@@ -3216,7 +3211,7 @@ INSN_ENTRY(opt_mod)
|
|
|
3216
3211
|
|
|
3217
3212
|
/* ### Here we do the instruction body. ### */
|
|
3218
3213
|
# define NAME_OF_CURRENT_INSN opt_mod
|
|
3219
|
-
# line
|
|
3214
|
+
# line 1139 "insns.def"
|
|
3220
3215
|
{
|
|
3221
3216
|
val = vm_opt_mod(recv, obj);
|
|
3222
3217
|
|
|
@@ -3224,7 +3219,7 @@ INSN_ENTRY(opt_mod)
|
|
|
3224
3219
|
CALL_SIMPLE_METHOD();
|
|
3225
3220
|
}
|
|
3226
3221
|
}
|
|
3227
|
-
# line
|
|
3222
|
+
# line 3223 "vm.inc"
|
|
3228
3223
|
# undef NAME_OF_CURRENT_INSN
|
|
3229
3224
|
|
|
3230
3225
|
/* ### Instruction trailers. ### */
|
|
@@ -3264,7 +3259,7 @@ INSN_ENTRY(opt_eq)
|
|
|
3264
3259
|
|
|
3265
3260
|
/* ### Here we do the instruction body. ### */
|
|
3266
3261
|
# define NAME_OF_CURRENT_INSN opt_eq
|
|
3267
|
-
# line
|
|
3262
|
+
# line 1153 "insns.def"
|
|
3268
3263
|
{
|
|
3269
3264
|
val = opt_equality(GET_ISEQ(), recv, obj, cd);
|
|
3270
3265
|
|
|
@@ -3272,7 +3267,7 @@ INSN_ENTRY(opt_eq)
|
|
|
3272
3267
|
CALL_SIMPLE_METHOD();
|
|
3273
3268
|
}
|
|
3274
3269
|
}
|
|
3275
|
-
# line
|
|
3270
|
+
# line 3271 "vm.inc"
|
|
3276
3271
|
# undef NAME_OF_CURRENT_INSN
|
|
3277
3272
|
|
|
3278
3273
|
/* ### Instruction trailers. ### */
|
|
@@ -3314,7 +3309,7 @@ INSN_ENTRY(opt_neq)
|
|
|
3314
3309
|
|
|
3315
3310
|
/* ### Here we do the instruction body. ### */
|
|
3316
3311
|
# define NAME_OF_CURRENT_INSN opt_neq
|
|
3317
|
-
# line
|
|
3312
|
+
# line 1167 "insns.def"
|
|
3318
3313
|
{
|
|
3319
3314
|
val = vm_opt_neq(GET_ISEQ(), cd, cd_eq, recv, obj);
|
|
3320
3315
|
|
|
@@ -3322,7 +3317,7 @@ INSN_ENTRY(opt_neq)
|
|
|
3322
3317
|
CALL_SIMPLE_METHOD();
|
|
3323
3318
|
}
|
|
3324
3319
|
}
|
|
3325
|
-
# line
|
|
3320
|
+
# line 3321 "vm.inc"
|
|
3326
3321
|
# undef NAME_OF_CURRENT_INSN
|
|
3327
3322
|
|
|
3328
3323
|
/* ### Instruction trailers. ### */
|
|
@@ -3362,7 +3357,7 @@ INSN_ENTRY(opt_lt)
|
|
|
3362
3357
|
|
|
3363
3358
|
/* ### Here we do the instruction body. ### */
|
|
3364
3359
|
# define NAME_OF_CURRENT_INSN opt_lt
|
|
3365
|
-
# line
|
|
3360
|
+
# line 1181 "insns.def"
|
|
3366
3361
|
{
|
|
3367
3362
|
val = vm_opt_lt(recv, obj);
|
|
3368
3363
|
|
|
@@ -3370,7 +3365,7 @@ INSN_ENTRY(opt_lt)
|
|
|
3370
3365
|
CALL_SIMPLE_METHOD();
|
|
3371
3366
|
}
|
|
3372
3367
|
}
|
|
3373
|
-
# line
|
|
3368
|
+
# line 3369 "vm.inc"
|
|
3374
3369
|
# undef NAME_OF_CURRENT_INSN
|
|
3375
3370
|
|
|
3376
3371
|
/* ### Instruction trailers. ### */
|
|
@@ -3410,7 +3405,7 @@ INSN_ENTRY(opt_le)
|
|
|
3410
3405
|
|
|
3411
3406
|
/* ### Here we do the instruction body. ### */
|
|
3412
3407
|
# define NAME_OF_CURRENT_INSN opt_le
|
|
3413
|
-
# line
|
|
3408
|
+
# line 1195 "insns.def"
|
|
3414
3409
|
{
|
|
3415
3410
|
val = vm_opt_le(recv, obj);
|
|
3416
3411
|
|
|
@@ -3418,7 +3413,7 @@ INSN_ENTRY(opt_le)
|
|
|
3418
3413
|
CALL_SIMPLE_METHOD();
|
|
3419
3414
|
}
|
|
3420
3415
|
}
|
|
3421
|
-
# line
|
|
3416
|
+
# line 3417 "vm.inc"
|
|
3422
3417
|
# undef NAME_OF_CURRENT_INSN
|
|
3423
3418
|
|
|
3424
3419
|
/* ### Instruction trailers. ### */
|
|
@@ -3458,7 +3453,7 @@ INSN_ENTRY(opt_gt)
|
|
|
3458
3453
|
|
|
3459
3454
|
/* ### Here we do the instruction body. ### */
|
|
3460
3455
|
# define NAME_OF_CURRENT_INSN opt_gt
|
|
3461
|
-
# line
|
|
3456
|
+
# line 1209 "insns.def"
|
|
3462
3457
|
{
|
|
3463
3458
|
val = vm_opt_gt(recv, obj);
|
|
3464
3459
|
|
|
@@ -3466,7 +3461,7 @@ INSN_ENTRY(opt_gt)
|
|
|
3466
3461
|
CALL_SIMPLE_METHOD();
|
|
3467
3462
|
}
|
|
3468
3463
|
}
|
|
3469
|
-
# line
|
|
3464
|
+
# line 3465 "vm.inc"
|
|
3470
3465
|
# undef NAME_OF_CURRENT_INSN
|
|
3471
3466
|
|
|
3472
3467
|
/* ### Instruction trailers. ### */
|
|
@@ -3506,7 +3501,7 @@ INSN_ENTRY(opt_ge)
|
|
|
3506
3501
|
|
|
3507
3502
|
/* ### Here we do the instruction body. ### */
|
|
3508
3503
|
# define NAME_OF_CURRENT_INSN opt_ge
|
|
3509
|
-
# line
|
|
3504
|
+
# line 1223 "insns.def"
|
|
3510
3505
|
{
|
|
3511
3506
|
val = vm_opt_ge(recv, obj);
|
|
3512
3507
|
|
|
@@ -3514,7 +3509,7 @@ INSN_ENTRY(opt_ge)
|
|
|
3514
3509
|
CALL_SIMPLE_METHOD();
|
|
3515
3510
|
}
|
|
3516
3511
|
}
|
|
3517
|
-
# line
|
|
3512
|
+
# line 3513 "vm.inc"
|
|
3518
3513
|
# undef NAME_OF_CURRENT_INSN
|
|
3519
3514
|
|
|
3520
3515
|
/* ### Instruction trailers. ### */
|
|
@@ -3554,7 +3549,7 @@ INSN_ENTRY(opt_ltlt)
|
|
|
3554
3549
|
|
|
3555
3550
|
/* ### Here we do the instruction body. ### */
|
|
3556
3551
|
# define NAME_OF_CURRENT_INSN opt_ltlt
|
|
3557
|
-
# line
|
|
3552
|
+
# line 1241 "insns.def"
|
|
3558
3553
|
{
|
|
3559
3554
|
val = vm_opt_ltlt(recv, obj);
|
|
3560
3555
|
|
|
@@ -3562,7 +3557,7 @@ INSN_ENTRY(opt_ltlt)
|
|
|
3562
3557
|
CALL_SIMPLE_METHOD();
|
|
3563
3558
|
}
|
|
3564
3559
|
}
|
|
3565
|
-
# line
|
|
3560
|
+
# line 3561 "vm.inc"
|
|
3566
3561
|
# undef NAME_OF_CURRENT_INSN
|
|
3567
3562
|
|
|
3568
3563
|
/* ### Instruction trailers. ### */
|
|
@@ -3602,7 +3597,7 @@ INSN_ENTRY(opt_and)
|
|
|
3602
3597
|
|
|
3603
3598
|
/* ### Here we do the instruction body. ### */
|
|
3604
3599
|
# define NAME_OF_CURRENT_INSN opt_and
|
|
3605
|
-
# line
|
|
3600
|
+
# line 1255 "insns.def"
|
|
3606
3601
|
{
|
|
3607
3602
|
val = vm_opt_and(recv, obj);
|
|
3608
3603
|
|
|
@@ -3610,7 +3605,7 @@ INSN_ENTRY(opt_and)
|
|
|
3610
3605
|
CALL_SIMPLE_METHOD();
|
|
3611
3606
|
}
|
|
3612
3607
|
}
|
|
3613
|
-
# line
|
|
3608
|
+
# line 3609 "vm.inc"
|
|
3614
3609
|
# undef NAME_OF_CURRENT_INSN
|
|
3615
3610
|
|
|
3616
3611
|
/* ### Instruction trailers. ### */
|
|
@@ -3650,7 +3645,7 @@ INSN_ENTRY(opt_or)
|
|
|
3650
3645
|
|
|
3651
3646
|
/* ### Here we do the instruction body. ### */
|
|
3652
3647
|
# define NAME_OF_CURRENT_INSN opt_or
|
|
3653
|
-
# line
|
|
3648
|
+
# line 1269 "insns.def"
|
|
3654
3649
|
{
|
|
3655
3650
|
val = vm_opt_or(recv, obj);
|
|
3656
3651
|
|
|
@@ -3658,7 +3653,7 @@ INSN_ENTRY(opt_or)
|
|
|
3658
3653
|
CALL_SIMPLE_METHOD();
|
|
3659
3654
|
}
|
|
3660
3655
|
}
|
|
3661
|
-
# line
|
|
3656
|
+
# line 3657 "vm.inc"
|
|
3662
3657
|
# undef NAME_OF_CURRENT_INSN
|
|
3663
3658
|
|
|
3664
3659
|
/* ### Instruction trailers. ### */
|
|
@@ -3698,7 +3693,7 @@ INSN_ENTRY(opt_aref)
|
|
|
3698
3693
|
|
|
3699
3694
|
/* ### Here we do the instruction body. ### */
|
|
3700
3695
|
# define NAME_OF_CURRENT_INSN opt_aref
|
|
3701
|
-
# line
|
|
3696
|
+
# line 1288 "insns.def"
|
|
3702
3697
|
{
|
|
3703
3698
|
val = vm_opt_aref(recv, obj);
|
|
3704
3699
|
|
|
@@ -3706,7 +3701,7 @@ INSN_ENTRY(opt_aref)
|
|
|
3706
3701
|
CALL_SIMPLE_METHOD();
|
|
3707
3702
|
}
|
|
3708
3703
|
}
|
|
3709
|
-
# line
|
|
3704
|
+
# line 3705 "vm.inc"
|
|
3710
3705
|
# undef NAME_OF_CURRENT_INSN
|
|
3711
3706
|
|
|
3712
3707
|
/* ### Instruction trailers. ### */
|
|
@@ -3747,7 +3742,7 @@ INSN_ENTRY(opt_aset)
|
|
|
3747
3742
|
|
|
3748
3743
|
/* ### Here we do the instruction body. ### */
|
|
3749
3744
|
# define NAME_OF_CURRENT_INSN opt_aset
|
|
3750
|
-
# line
|
|
3745
|
+
# line 1305 "insns.def"
|
|
3751
3746
|
{
|
|
3752
3747
|
val = vm_opt_aset(recv, obj, set);
|
|
3753
3748
|
|
|
@@ -3755,7 +3750,7 @@ INSN_ENTRY(opt_aset)
|
|
|
3755
3750
|
CALL_SIMPLE_METHOD();
|
|
3756
3751
|
}
|
|
3757
3752
|
}
|
|
3758
|
-
# line
|
|
3753
|
+
# line 3754 "vm.inc"
|
|
3759
3754
|
# undef NAME_OF_CURRENT_INSN
|
|
3760
3755
|
|
|
3761
3756
|
/* ### Instruction trailers. ### */
|
|
@@ -3796,7 +3791,7 @@ INSN_ENTRY(opt_aset_with)
|
|
|
3796
3791
|
|
|
3797
3792
|
/* ### Here we do the instruction body. ### */
|
|
3798
3793
|
# define NAME_OF_CURRENT_INSN opt_aset_with
|
|
3799
|
-
# line
|
|
3794
|
+
# line 1321 "insns.def"
|
|
3800
3795
|
{
|
|
3801
3796
|
VALUE tmp = vm_opt_aset_with(recv, key, val);
|
|
3802
3797
|
|
|
@@ -3811,7 +3806,7 @@ INSN_ENTRY(opt_aset_with)
|
|
|
3811
3806
|
CALL_SIMPLE_METHOD();
|
|
3812
3807
|
}
|
|
3813
3808
|
}
|
|
3814
|
-
# line
|
|
3809
|
+
# line 3810 "vm.inc"
|
|
3815
3810
|
# undef NAME_OF_CURRENT_INSN
|
|
3816
3811
|
|
|
3817
3812
|
/* ### Instruction trailers. ### */
|
|
@@ -3852,7 +3847,7 @@ INSN_ENTRY(opt_aref_with)
|
|
|
3852
3847
|
|
|
3853
3848
|
/* ### Here we do the instruction body. ### */
|
|
3854
3849
|
# define NAME_OF_CURRENT_INSN opt_aref_with
|
|
3855
|
-
# line
|
|
3850
|
+
# line 1344 "insns.def"
|
|
3856
3851
|
{
|
|
3857
3852
|
val = vm_opt_aref_with(recv, key);
|
|
3858
3853
|
|
|
@@ -3863,7 +3858,7 @@ INSN_ENTRY(opt_aref_with)
|
|
|
3863
3858
|
CALL_SIMPLE_METHOD();
|
|
3864
3859
|
}
|
|
3865
3860
|
}
|
|
3866
|
-
# line
|
|
3861
|
+
# line 3862 "vm.inc"
|
|
3867
3862
|
# undef NAME_OF_CURRENT_INSN
|
|
3868
3863
|
|
|
3869
3864
|
/* ### Instruction trailers. ### */
|
|
@@ -3902,7 +3897,7 @@ INSN_ENTRY(opt_length)
|
|
|
3902
3897
|
|
|
3903
3898
|
/* ### Here we do the instruction body. ### */
|
|
3904
3899
|
# define NAME_OF_CURRENT_INSN opt_length
|
|
3905
|
-
# line
|
|
3900
|
+
# line 1361 "insns.def"
|
|
3906
3901
|
{
|
|
3907
3902
|
val = vm_opt_length(recv, BOP_LENGTH);
|
|
3908
3903
|
|
|
@@ -3910,7 +3905,7 @@ INSN_ENTRY(opt_length)
|
|
|
3910
3905
|
CALL_SIMPLE_METHOD();
|
|
3911
3906
|
}
|
|
3912
3907
|
}
|
|
3913
|
-
# line
|
|
3908
|
+
# line 3909 "vm.inc"
|
|
3914
3909
|
# undef NAME_OF_CURRENT_INSN
|
|
3915
3910
|
|
|
3916
3911
|
/* ### Instruction trailers. ### */
|
|
@@ -3949,7 +3944,7 @@ INSN_ENTRY(opt_size)
|
|
|
3949
3944
|
|
|
3950
3945
|
/* ### Here we do the instruction body. ### */
|
|
3951
3946
|
# define NAME_OF_CURRENT_INSN opt_size
|
|
3952
|
-
# line
|
|
3947
|
+
# line 1375 "insns.def"
|
|
3953
3948
|
{
|
|
3954
3949
|
val = vm_opt_length(recv, BOP_SIZE);
|
|
3955
3950
|
|
|
@@ -3957,7 +3952,7 @@ INSN_ENTRY(opt_size)
|
|
|
3957
3952
|
CALL_SIMPLE_METHOD();
|
|
3958
3953
|
}
|
|
3959
3954
|
}
|
|
3960
|
-
# line
|
|
3955
|
+
# line 3956 "vm.inc"
|
|
3961
3956
|
# undef NAME_OF_CURRENT_INSN
|
|
3962
3957
|
|
|
3963
3958
|
/* ### Instruction trailers. ### */
|
|
@@ -3996,7 +3991,7 @@ INSN_ENTRY(opt_empty_p)
|
|
|
3996
3991
|
|
|
3997
3992
|
/* ### Here we do the instruction body. ### */
|
|
3998
3993
|
# define NAME_OF_CURRENT_INSN opt_empty_p
|
|
3999
|
-
# line
|
|
3994
|
+
# line 1389 "insns.def"
|
|
4000
3995
|
{
|
|
4001
3996
|
val = vm_opt_empty_p(recv);
|
|
4002
3997
|
|
|
@@ -4004,7 +3999,7 @@ INSN_ENTRY(opt_empty_p)
|
|
|
4004
3999
|
CALL_SIMPLE_METHOD();
|
|
4005
4000
|
}
|
|
4006
4001
|
}
|
|
4007
|
-
# line
|
|
4002
|
+
# line 4003 "vm.inc"
|
|
4008
4003
|
# undef NAME_OF_CURRENT_INSN
|
|
4009
4004
|
|
|
4010
4005
|
/* ### Instruction trailers. ### */
|
|
@@ -4043,7 +4038,7 @@ INSN_ENTRY(opt_succ)
|
|
|
4043
4038
|
|
|
4044
4039
|
/* ### Here we do the instruction body. ### */
|
|
4045
4040
|
# define NAME_OF_CURRENT_INSN opt_succ
|
|
4046
|
-
# line
|
|
4041
|
+
# line 1403 "insns.def"
|
|
4047
4042
|
{
|
|
4048
4043
|
val = vm_opt_succ(recv);
|
|
4049
4044
|
|
|
@@ -4051,7 +4046,7 @@ INSN_ENTRY(opt_succ)
|
|
|
4051
4046
|
CALL_SIMPLE_METHOD();
|
|
4052
4047
|
}
|
|
4053
4048
|
}
|
|
4054
|
-
# line
|
|
4049
|
+
# line 4050 "vm.inc"
|
|
4055
4050
|
# undef NAME_OF_CURRENT_INSN
|
|
4056
4051
|
|
|
4057
4052
|
/* ### Instruction trailers. ### */
|
|
@@ -4090,7 +4085,7 @@ INSN_ENTRY(opt_not)
|
|
|
4090
4085
|
|
|
4091
4086
|
/* ### Here we do the instruction body. ### */
|
|
4092
4087
|
# define NAME_OF_CURRENT_INSN opt_not
|
|
4093
|
-
# line
|
|
4088
|
+
# line 1417 "insns.def"
|
|
4094
4089
|
{
|
|
4095
4090
|
val = vm_opt_not(GET_ISEQ(), cd, recv);
|
|
4096
4091
|
|
|
@@ -4098,7 +4093,7 @@ INSN_ENTRY(opt_not)
|
|
|
4098
4093
|
CALL_SIMPLE_METHOD();
|
|
4099
4094
|
}
|
|
4100
4095
|
}
|
|
4101
|
-
# line
|
|
4096
|
+
# line 4097 "vm.inc"
|
|
4102
4097
|
# undef NAME_OF_CURRENT_INSN
|
|
4103
4098
|
|
|
4104
4099
|
/* ### Instruction trailers. ### */
|
|
@@ -4138,7 +4133,7 @@ INSN_ENTRY(opt_regexpmatch2)
|
|
|
4138
4133
|
|
|
4139
4134
|
/* ### Here we do the instruction body. ### */
|
|
4140
4135
|
# define NAME_OF_CURRENT_INSN opt_regexpmatch2
|
|
4141
|
-
# line
|
|
4136
|
+
# line 1432 "insns.def"
|
|
4142
4137
|
{
|
|
4143
4138
|
val = vm_opt_regexpmatch2(obj2, obj1);
|
|
4144
4139
|
|
|
@@ -4146,7 +4141,7 @@ INSN_ENTRY(opt_regexpmatch2)
|
|
|
4146
4141
|
CALL_SIMPLE_METHOD();
|
|
4147
4142
|
}
|
|
4148
4143
|
}
|
|
4149
|
-
# line
|
|
4144
|
+
# line 4145 "vm.inc"
|
|
4150
4145
|
# undef NAME_OF_CURRENT_INSN
|
|
4151
4146
|
|
|
4152
4147
|
/* ### Instruction trailers. ### */
|
|
@@ -4184,11 +4179,11 @@ INSN_ENTRY(invokebuiltin)
|
|
|
4184
4179
|
|
|
4185
4180
|
/* ### Here we do the instruction body. ### */
|
|
4186
4181
|
# define NAME_OF_CURRENT_INSN invokebuiltin
|
|
4187
|
-
# line
|
|
4182
|
+
# line 1469 "insns.def"
|
|
4188
4183
|
{
|
|
4189
4184
|
val = vm_invoke_builtin(ec, reg_cfp, bf, STACK_ADDR_FROM_TOP(bf->argc));
|
|
4190
4185
|
}
|
|
4191
|
-
# line
|
|
4186
|
+
# line 4187 "vm.inc"
|
|
4192
4187
|
# undef NAME_OF_CURRENT_INSN
|
|
4193
4188
|
|
|
4194
4189
|
/* ### Instruction trailers. ### */
|
|
@@ -4228,11 +4223,11 @@ INSN_ENTRY(opt_invokebuiltin_delegate)
|
|
|
4228
4223
|
|
|
4229
4224
|
/* ### Here we do the instruction body. ### */
|
|
4230
4225
|
# define NAME_OF_CURRENT_INSN opt_invokebuiltin_delegate
|
|
4231
|
-
# line
|
|
4226
|
+
# line 1480 "insns.def"
|
|
4232
4227
|
{
|
|
4233
4228
|
val = vm_invoke_builtin_delegate(ec, reg_cfp, bf, (unsigned int)index);
|
|
4234
4229
|
}
|
|
4235
|
-
# line
|
|
4230
|
+
# line 4231 "vm.inc"
|
|
4236
4231
|
# undef NAME_OF_CURRENT_INSN
|
|
4237
4232
|
|
|
4238
4233
|
/* ### Instruction trailers. ### */
|
|
@@ -4272,7 +4267,7 @@ INSN_ENTRY(opt_invokebuiltin_delegate_leave)
|
|
|
4272
4267
|
|
|
4273
4268
|
/* ### Here we do the instruction body. ### */
|
|
4274
4269
|
# define NAME_OF_CURRENT_INSN opt_invokebuiltin_delegate_leave
|
|
4275
|
-
# line
|
|
4270
|
+
# line 1491 "insns.def"
|
|
4276
4271
|
{
|
|
4277
4272
|
val = vm_invoke_builtin_delegate(ec, reg_cfp, bf, (unsigned int)index);
|
|
4278
4273
|
|
|
@@ -4290,7 +4285,7 @@ INSN_ENTRY(opt_invokebuiltin_delegate_leave)
|
|
|
4290
4285
|
RESTORE_REGS();
|
|
4291
4286
|
}
|
|
4292
4287
|
}
|
|
4293
|
-
# line
|
|
4288
|
+
# line 4289 "vm.inc"
|
|
4294
4289
|
# undef NAME_OF_CURRENT_INSN
|
|
4295
4290
|
|
|
4296
4291
|
/* ### Instruction trailers. ### */
|
|
@@ -4317,7 +4312,7 @@ INSN_ENTRY(getlocal_WC_0)
|
|
|
4317
4312
|
/* ### Declare and assign variables. ### */
|
|
4318
4313
|
#line 10 "defs/opt_operand.def"
|
|
4319
4314
|
const rb_num_t level = 0;
|
|
4320
|
-
#line
|
|
4315
|
+
#line 4316 "vm.inc"
|
|
4321
4316
|
lindex_t idx = (lindex_t)GET_OPERAND(1);
|
|
4322
4317
|
# define INSN_ATTR(x) attr_ ## x ## _getlocal_WC_0(idx)
|
|
4323
4318
|
bool leaf = INSN_ATTR(leaf);
|
|
@@ -4337,7 +4332,7 @@ INSN_ENTRY(getlocal_WC_0)
|
|
|
4337
4332
|
RB_DEBUG_COUNTER_INC(lvar_get);
|
|
4338
4333
|
(void)RB_DEBUG_COUNTER_INC_IF(lvar_get_dynamic, level > 0);
|
|
4339
4334
|
}
|
|
4340
|
-
# line
|
|
4335
|
+
# line 4336 "vm.inc"
|
|
4341
4336
|
# undef NAME_OF_CURRENT_INSN
|
|
4342
4337
|
|
|
4343
4338
|
/* ### Instruction trailers. ### */
|
|
@@ -4364,7 +4359,7 @@ INSN_ENTRY(getlocal_WC_1)
|
|
|
4364
4359
|
/* ### Declare and assign variables. ### */
|
|
4365
4360
|
#line 11 "defs/opt_operand.def"
|
|
4366
4361
|
const rb_num_t level = 1;
|
|
4367
|
-
#line
|
|
4362
|
+
#line 4363 "vm.inc"
|
|
4368
4363
|
lindex_t idx = (lindex_t)GET_OPERAND(1);
|
|
4369
4364
|
# define INSN_ATTR(x) attr_ ## x ## _getlocal_WC_1(idx)
|
|
4370
4365
|
bool leaf = INSN_ATTR(leaf);
|
|
@@ -4384,7 +4379,7 @@ INSN_ENTRY(getlocal_WC_1)
|
|
|
4384
4379
|
RB_DEBUG_COUNTER_INC(lvar_get);
|
|
4385
4380
|
(void)RB_DEBUG_COUNTER_INC_IF(lvar_get_dynamic, level > 0);
|
|
4386
4381
|
}
|
|
4387
|
-
# line
|
|
4382
|
+
# line 4383 "vm.inc"
|
|
4388
4383
|
# undef NAME_OF_CURRENT_INSN
|
|
4389
4384
|
|
|
4390
4385
|
/* ### Instruction trailers. ### */
|
|
@@ -4411,7 +4406,7 @@ INSN_ENTRY(setlocal_WC_0)
|
|
|
4411
4406
|
/* ### Declare and assign variables. ### */
|
|
4412
4407
|
#line 12 "defs/opt_operand.def"
|
|
4413
4408
|
const rb_num_t level = 0;
|
|
4414
|
-
#line
|
|
4409
|
+
#line 4410 "vm.inc"
|
|
4415
4410
|
lindex_t idx = (lindex_t)GET_OPERAND(1);
|
|
4416
4411
|
# define INSN_ATTR(x) attr_ ## x ## _setlocal_WC_0(idx)
|
|
4417
4412
|
bool leaf = INSN_ATTR(leaf);
|
|
@@ -4431,7 +4426,7 @@ INSN_ENTRY(setlocal_WC_0)
|
|
|
4431
4426
|
RB_DEBUG_COUNTER_INC(lvar_set);
|
|
4432
4427
|
(void)RB_DEBUG_COUNTER_INC_IF(lvar_set_dynamic, level > 0);
|
|
4433
4428
|
}
|
|
4434
|
-
# line
|
|
4429
|
+
# line 4430 "vm.inc"
|
|
4435
4430
|
# undef NAME_OF_CURRENT_INSN
|
|
4436
4431
|
|
|
4437
4432
|
/* ### Instruction trailers. ### */
|
|
@@ -4455,7 +4450,7 @@ INSN_ENTRY(setlocal_WC_1)
|
|
|
4455
4450
|
/* ### Declare and assign variables. ### */
|
|
4456
4451
|
#line 13 "defs/opt_operand.def"
|
|
4457
4452
|
const rb_num_t level = 1;
|
|
4458
|
-
#line
|
|
4453
|
+
#line 4454 "vm.inc"
|
|
4459
4454
|
lindex_t idx = (lindex_t)GET_OPERAND(1);
|
|
4460
4455
|
# define INSN_ATTR(x) attr_ ## x ## _setlocal_WC_1(idx)
|
|
4461
4456
|
bool leaf = INSN_ATTR(leaf);
|
|
@@ -4475,7 +4470,7 @@ INSN_ENTRY(setlocal_WC_1)
|
|
|
4475
4470
|
RB_DEBUG_COUNTER_INC(lvar_set);
|
|
4476
4471
|
(void)RB_DEBUG_COUNTER_INC_IF(lvar_set_dynamic, level > 0);
|
|
4477
4472
|
}
|
|
4478
|
-
# line
|
|
4473
|
+
# line 4474 "vm.inc"
|
|
4479
4474
|
# undef NAME_OF_CURRENT_INSN
|
|
4480
4475
|
|
|
4481
4476
|
/* ### Instruction trailers. ### */
|
|
@@ -4499,7 +4494,7 @@ INSN_ENTRY(putobject_INT2FIX_0_)
|
|
|
4499
4494
|
/* ### Declare and assign variables. ### */
|
|
4500
4495
|
#line 15 "defs/opt_operand.def"
|
|
4501
4496
|
const VALUE val = INT2FIX(0);
|
|
4502
|
-
#line
|
|
4497
|
+
#line 4498 "vm.inc"
|
|
4503
4498
|
# define INSN_ATTR(x) attr_ ## x ## _putobject_INT2FIX_0_()
|
|
4504
4499
|
bool leaf = INSN_ATTR(leaf);
|
|
4505
4500
|
|
|
@@ -4530,7 +4525,7 @@ INSN_ENTRY(putobject_INT2FIX_1_)
|
|
|
4530
4525
|
/* ### Declare and assign variables. ### */
|
|
4531
4526
|
#line 16 "defs/opt_operand.def"
|
|
4532
4527
|
const VALUE val = INT2FIX(1);
|
|
4533
|
-
#line
|
|
4528
|
+
#line 4529 "vm.inc"
|
|
4534
4529
|
# define INSN_ATTR(x) attr_ ## x ## _putobject_INT2FIX_1_()
|
|
4535
4530
|
bool leaf = INSN_ATTR(leaf);
|
|
4536
4531
|
|