debase-ruby_core_source 0.10.11 → 0.10.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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