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.
Files changed (115) hide show
  1. checksums.yaml +4 -4
  2. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/addr2line.h +0 -0
  3. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/builtin.h +0 -0
  4. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/ccan/build_assert/build_assert.h +0 -0
  5. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/ccan/check_type/check_type.h +0 -0
  6. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/ccan/container_of/container_of.h +0 -0
  7. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/ccan/list/list.h +0 -0
  8. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/ccan/str/str.h +0 -0
  9. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/constant.h +0 -0
  10. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/debug_counter.h +38 -4
  11. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/dln.h +0 -0
  12. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/encindex.h +0 -0
  13. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/eval_intern.h +16 -5
  14. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/gc.h +0 -0
  15. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/hrtime.h +0 -0
  16. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/id.h +0 -0
  17. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/id_table.h +0 -0
  18. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/insns.inc +0 -0
  19. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/insns_info.inc +93 -89
  20. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal.h +0 -0
  21. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/array.h +5 -0
  22. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/bignum.h +0 -0
  23. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/bits.h +0 -0
  24. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/class.h +7 -1
  25. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/compar.h +0 -0
  26. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/compile.h +0 -0
  27. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/compilers.h +0 -0
  28. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/complex.h +0 -0
  29. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/cont.h +0 -0
  30. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/dir.h +0 -0
  31. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/enc.h +0 -0
  32. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/encoding.h +0 -0
  33. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/enum.h +0 -0
  34. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/enumerator.h +0 -0
  35. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/error.h +0 -7
  36. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/eval.h +0 -0
  37. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/file.h +0 -0
  38. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/fixnum.h +1 -1
  39. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/gc.h +9 -2
  40. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/hash.h +2 -1
  41. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/imemo.h +0 -0
  42. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/inits.h +0 -0
  43. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/io.h +0 -0
  44. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/load.h +0 -0
  45. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/loadpath.h +0 -0
  46. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/math.h +0 -0
  47. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/missing.h +0 -0
  48. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/numeric.h +4 -1
  49. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/object.h +0 -0
  50. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/parse.h +0 -0
  51. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/proc.h +1 -0
  52. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/process.h +0 -0
  53. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/random.h +0 -0
  54. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/range.h +4 -0
  55. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/rational.h +2 -0
  56. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/re.h +0 -0
  57. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/sanitizers.h +0 -0
  58. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/scheduler.h +9 -0
  59. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/serial.h +0 -0
  60. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/signal.h +0 -0
  61. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/static_assert.h +0 -0
  62. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/string.h +5 -0
  63. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/struct.h +0 -0
  64. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/symbol.h +0 -0
  65. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/thread.h +0 -6
  66. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/time.h +0 -0
  67. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/transcode.h +0 -0
  68. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/util.h +0 -0
  69. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/variable.h +1 -0
  70. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/vm.h +7 -6
  71. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/internal/warnings.h +0 -0
  72. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/iseq.h +1 -0
  73. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/known_errors.inc +0 -0
  74. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/method.h +0 -0
  75. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/mjit.h +37 -14
  76. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/mjit_compile.inc +715 -557
  77. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/node.h +2 -2
  78. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/node_name.inc +0 -0
  79. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/opt_sc.inc +0 -0
  80. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/optinsn.inc +0 -0
  81. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/optunifs.inc +0 -0
  82. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/parse.h +0 -0
  83. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/probes_helper.h +0 -0
  84. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1/ractor.h → ruby-3.0.0-p0/ractor_core.h} +97 -25
  85. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/regenc.h +0 -0
  86. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/regint.h +0 -0
  87. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/regparse.h +0 -0
  88. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/revision.h +2 -0
  89. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/ruby_assert.h +0 -0
  90. data/lib/debase/ruby_core_source/ruby-3.0.0-p0/ruby_atomic.h +23 -0
  91. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/siphash.h +0 -0
  92. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/symbol.h +0 -0
  93. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/thread_pthread.h +23 -14
  94. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/thread_win32.h +5 -10
  95. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/timev.h +0 -0
  96. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/transcode_data.h +0 -0
  97. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/transient_heap.h +4 -0
  98. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/variable.h +2 -1
  99. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/version.h +3 -3
  100. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/vm.inc +94 -99
  101. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/vm_call_iseq_optimized.inc +48 -48
  102. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/vm_callinfo.h +2 -3
  103. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/vm_core.h +96 -25
  104. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/vm_debug.h +0 -0
  105. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/vm_exec.h +0 -0
  106. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/vm_insnhelper.h +1 -4
  107. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/vm_opts.h +0 -0
  108. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/vm_sync.h +44 -5
  109. data/lib/debase/ruby_core_source/{ruby-3.0.0-preview1 → ruby-3.0.0-p0}/vmtc.inc +0 -0
  110. data/lib/debase/ruby_core_source/version.rb +1 -1
  111. metadata +111 -113
  112. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/internal/mjit.h +0 -29
  113. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/ractor_pub.h +0 -50
  114. data/lib/debase/ruby_core_source/ruby-3.0.0-preview1/revision.h +0 -2
  115. 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 nd_pkwargs u1.node
277
- #define nd_pconst u2.node
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
@@ -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
- basket_type_shareable,
14
- basket_type_copy_marshal,
15
- basket_type_copy_custom,
13
+ basket_type_ref,
14
+ basket_type_copy,
16
15
  basket_type_move,
17
- basket_type_exception,
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 rb_ractor_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 = 0x00,
57
- wait_recving = 0x01,
58
- wait_taking = 0x02,
59
- wait_yielding = 0x04,
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 rb_ractor_recv_parameters(rb_execution_context_t *ec, rb_ractor_t *g, int len, VALUE *ptr);
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
- uint32_t rb_ractor_id(const rb_ractor_t *r);
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 (rb_ractor_shareable_p(obj)) {
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
- rp(obj);
265
- rb_bug("rb_ractor_confirm_belonging object-ractor id:%u, current-ractor id:%u", id, rb_ractor_current_id());
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
  }
@@ -0,0 +1,2 @@
1
+ #define RUBY_REVISION "95aff21468"
2
+ #define RUBY_FULL_REVISION "95aff214687a5e12c3eb57d056665741e734c188"
@@ -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)
@@ -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
- void rb_native_mutex_lock(rb_nativethread_lock_t *lock);
56
- void rb_native_mutex_unlock(rb_nativethread_lock_t *lock);
57
- void rb_native_mutex_initialize(rb_nativethread_lock_t *lock);
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 */
@@ -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
- struct st_table *rb_ivar_generic_ivtbl(VALUE obj);
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 -1
15
+ #define RUBY_PATCHLEVEL 0
16
16
 
17
17
  #define RUBY_RELEASE_YEAR 2020
18
- #define RUBY_RELEASE_MONTH 9
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 "preview1"
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 = rb_str_resurrect(str);
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 = rb_ary_new4(num, STACK_ADDR_FROM_TOP(num));
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, vm_search_method_wrap);
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, vm_search_method_wrap);
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, vm_search_super_method);
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, vm_search_invokeblock);
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 2547 "vm.inc"
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 919 "insns.def"
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 2602 "vm.inc"
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 952 "insns.def"
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 2644 "vm.inc"
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 970 "insns.def"
2675
+ # line 965 "insns.def"
2681
2676
  {
2682
2677
  RUBY_VM_CHECK_INTS(ec);
2683
2678
  JUMP(dst);
2684
2679
  }
2685
- # line 2686 "vm.inc"
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 983 "insns.def"
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 2728 "vm.inc"
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 998 "insns.def"
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 2770 "vm.inc"
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 1013 "insns.def"
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 2812 "vm.inc"
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 1030 "insns.def"
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 2859 "vm.inc"
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 1046 "insns.def"
2891
+ # line 1041 "insns.def"
2897
2892
  {
2898
2893
  vm_ic_update(ic, val, GET_EP());
2899
2894
  }
2900
- # line 2901 "vm.inc"
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 1056 "insns.def"
2936
+ # line 1051 "insns.def"
2942
2937
  {
2943
2938
  val = vm_once_dispatch(ec, iseq, ise);
2944
2939
  }
2945
- # line 2946 "vm.inc"
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 1067 "insns.def"
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 2991 "vm.inc"
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 1083 "insns.def"
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 3036 "vm.inc"
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 1097 "insns.def"
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 3084 "vm.inc"
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 1111 "insns.def"
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 3132 "vm.inc"
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 1128 "insns.def"
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 3180 "vm.inc"
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 1144 "insns.def"
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 3228 "vm.inc"
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 1158 "insns.def"
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 3276 "vm.inc"
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 1172 "insns.def"
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 3326 "vm.inc"
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 1186 "insns.def"
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 3374 "vm.inc"
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 1200 "insns.def"
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 3422 "vm.inc"
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 1214 "insns.def"
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 3470 "vm.inc"
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 1228 "insns.def"
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 3518 "vm.inc"
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 1246 "insns.def"
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 3566 "vm.inc"
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 1260 "insns.def"
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 3614 "vm.inc"
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 1274 "insns.def"
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 3662 "vm.inc"
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 1293 "insns.def"
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 3710 "vm.inc"
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 1310 "insns.def"
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 3759 "vm.inc"
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 1326 "insns.def"
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 3815 "vm.inc"
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 1349 "insns.def"
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 3867 "vm.inc"
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 1366 "insns.def"
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 3914 "vm.inc"
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 1380 "insns.def"
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 3961 "vm.inc"
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 1394 "insns.def"
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 4008 "vm.inc"
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 1408 "insns.def"
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 4055 "vm.inc"
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 1422 "insns.def"
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 4102 "vm.inc"
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 1437 "insns.def"
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 4150 "vm.inc"
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 1474 "insns.def"
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 4192 "vm.inc"
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 1485 "insns.def"
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 4236 "vm.inc"
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 1496 "insns.def"
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 4294 "vm.inc"
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 4321 "vm.inc"
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 4341 "vm.inc"
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 4368 "vm.inc"
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 4388 "vm.inc"
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 4415 "vm.inc"
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 4435 "vm.inc"
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 4459 "vm.inc"
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 4479 "vm.inc"
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 4503 "vm.inc"
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 4534 "vm.inc"
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