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
@@ -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
|
|