Tempfile document updated.
[ruby.git] / rjit_c.rb
blobf6d48261354ef92e3765594ccd1af639f88c492f
1 # frozen_string_literal: true
2 # Part of this file is generated by tool/rjit/bindgen.rb.
3 # Run `make rjit-bindgen` to update code between "RJIT bindgen begin" and "RJIT bindgen end".
4 module RubyVM::RJIT # :nodoc: all
5   #
6   # Main: Used by RJIT
7   #
8   # This `class << C` section is for calling C functions with Primitive.
9   # For importing variables or macros, use tool/rjit/bindgen.rb instead.
10   class << C = Module.new
11     def mmap(mem_size)
12       Primitive.cexpr! 'SIZET2NUM((size_t)rjit_reserve_addr_space(NUM2UINT(mem_size)))'
13     end
15     def mprotect_write(mem_block, mem_size)
16       Primitive.mprotect_write(mem_block, mem_size)
17     end
19     def mprotect_exec(mem_block, mem_size)
20       Primitive.mprotect_exec(mem_block, mem_size)
21     end
23     def rjit_insn_exits
24       addr = Primitive.cexpr! 'SIZET2NUM((size_t)rjit_insn_exits)'
25       CType::Immediate.parse("size_t").new(addr)
26     end
28     def rb_rjit_counters
29       addr = Primitive.cexpr! 'SIZET2NUM((size_t)&rb_rjit_counters)'
30       rb_rjit_runtime_counters.new(addr)
31     end
33     # @param from [Integer] - From address
34     # @param to [Integer]   - To address
35     def dump_disasm(from, to, test: false)
36       Primitive.dump_disasm(from, to, test)
37     end
39     # Convert a Ruby object to a VALUE in Integer
40     def to_value(obj)
41       Primitive.cexpr! 'SIZET2NUM((size_t)obj)'
42     end
44     def BASIC_OP_UNREDEFINED_P(op, klass)
45       Primitive.cexpr! 'RBOOL(BASIC_OP_UNREDEFINED_P(NUM2INT(op), NUM2INT(klass)))'
46     end
48     def rb_iseq_line_no(iseq, pos)
49       _iseq_addr = iseq.to_i
50       Primitive.cexpr! 'UINT2NUM(rb_iseq_line_no((const rb_iseq_t *)NUM2SIZET(_iseq_addr), NUM2SIZET(pos)))'
51     end
53     def rb_class_of(obj)
54       Primitive.cexpr! 'rb_class_of(obj)'
55     end
57     def rb_callable_method_entry(klass, mid)
58       cme_addr = Primitive.cexpr! 'SIZET2NUM((size_t)rb_callable_method_entry(klass, NUM2UINT(mid)))'
59       return nil if cme_addr == 0
60       rb_callable_method_entry_t.new(cme_addr)
61     end
63     def METHOD_ENTRY_VISI(cme)
64       _cme_addr = cme.to_i
65       Primitive.cexpr! 'UINT2NUM(METHOD_ENTRY_VISI((const rb_callable_method_entry_t *)NUM2SIZET(_cme_addr)))'
66     end
68     def rb_simple_iseq_p(iseq)
69       _iseq_addr = iseq.to_i
70       Primitive.cexpr! 'RBOOL(rb_simple_iseq_p((rb_iseq_t *)NUM2SIZET(_iseq_addr)))'
71     end
73     def SPECIAL_CONST_P(obj)
74       _value = to_value(obj)
75       Primitive.cexpr! 'RBOOL(SPECIAL_CONST_P((VALUE)NUM2SIZET(_value)))'
76     end
78     def BUILTIN_TYPE(obj)
79       _value = to_value(obj)
80       Primitive.cexpr! 'INT2NUM(BUILTIN_TYPE((VALUE)NUM2SIZET(_value)))'
81     end
83     def RB_TYPE_P(obj, type)
84       Primitive.cexpr! 'RBOOL(RB_TYPE_P(obj, NUM2UINT(type)))'
85     end
87     def rb_shape_get_shape_id(obj)
88       _value = to_value(obj)
89       Primitive.cexpr! 'UINT2NUM((unsigned int)rb_shape_get_shape_id((VALUE)NUM2SIZET(_value)))'
90     end
92     def rb_shape_id_offset
93       Primitive.cexpr! 'INT2NUM(rb_shape_id_offset())'
94     end
96     def rb_shape_get_iv_index(shape_id, ivar_id)
97       Primitive.cstmt! %{
98         rb_shape_t *shape = rb_shape_get_shape_by_id((shape_id_t)NUM2SIZET(shape_id));
99         attr_index_t index;
100         bool found = rb_shape_get_iv_index(shape, (ID)NUM2SIZET(ivar_id), &index);
101         return found ? UINT2NUM(index) : Qnil;
102       }
103     end
105     def FL_TEST_RAW(obj, flags)
106       Primitive.cexpr! 'RBOOL(FL_TEST_RAW(obj, (VALUE)NUM2SIZET(flags)))'
107     end
109     def FL_TEST(obj, flags)
110       Primitive.cexpr! 'RBOOL(FL_TEST(obj, (VALUE)NUM2SIZET(flags)))'
111     end
113     def rjit_for_each_iseq(&block)
114       Primitive.rjit_for_each_iseq(block)
115     end
117     def get_symbol_id(name)
118       Primitive.cexpr! 'SIZET2NUM((size_t)rb_get_symbol_id(name))'
119     end
121     def rb_vm_frame_method_entry(cfp)
122       _cfp = cfp.to_i
123       cme_addr = Primitive.cexpr! 'SIZET2NUM((size_t)rb_vm_frame_method_entry((const rb_control_frame_t *)NUM2SIZET(_cfp)))'
124       return nil if cme_addr == 0
125       rb_callable_method_entry_t.new(cme_addr)
126     end
128     def rb_class_get_superclass(klass)
129       Primitive.cexpr! 'rb_class_get_superclass(klass)'
130     end
132     def ID2SYM(id)
133       Primitive.cexpr! 'ID2SYM((ID)NUM2SIZET(id))'
134     end
136     def obj_is_kind_of(obj, c)
137       Primitive.cexpr! 'rb_obj_is_kind_of(obj, c)'
138     end
140     def imemo_type_p(ptr, type)
141       _ptr = ptr.to_i
142       Primitive.cexpr! 'RBOOL(imemo_type_p((VALUE)NUM2SIZET(_ptr), NUM2UINT(type)))'
143     end
145     def rb_iseq_only_optparam_p(iseq)
146       _iseq = iseq.to_i
147       Primitive.cstmt! %{
148         extern bool rb_iseq_only_optparam_p(const rb_iseq_t *iseq);
149         return RBOOL(rb_iseq_only_optparam_p((rb_iseq_t *)NUM2SIZET(_iseq)));
150       }
151     end
153     def rb_iseq_only_kwparam_p(iseq)
154       _iseq = iseq.to_i
155       Primitive.cstmt! %{
156         extern bool rb_iseq_only_kwparam_p(const rb_iseq_t *iseq);
157         return RBOOL(rb_iseq_only_kwparam_p((rb_iseq_t *)NUM2SIZET(_iseq)));
158       }
159     end
161     def rb_obj_frozen_p(obj)
162       Primitive.cexpr! 'rb_obj_frozen_p(obj)'
163     end
165     def rb_intern(str)
166       Primitive.cexpr! 'SIZET2NUM((size_t)rb_intern(RSTRING_PTR(str)))'
167     end
169     def rb_method_entry_at(klass, mid)
170       me_addr = Primitive.cexpr! 'SIZET2NUM((size_t)rb_method_entry_at(klass, (ID)NUM2SIZET(mid)))'
171       me_addr == 0 ? nil : rb_method_entry_t.new(me_addr)
172     end
174     def rb_shape_get_next(shape, obj, id)
175       _shape = shape.to_i
176       shape_addr = Primitive.cexpr! 'SIZET2NUM((size_t)rb_shape_get_next((rb_shape_t *)NUM2SIZET(_shape), obj, (ID)NUM2SIZET(id)))'
177       rb_shape_t.new(shape_addr)
178     end
180     def rb_shape_id(shape)
181       _shape = shape.to_i
182       Primitive.cexpr! 'SIZET2NUM((size_t)rb_shape_id((rb_shape_t *)NUM2SIZET(_shape)))'
183     end
185     def rb_class_attached_object(klass)
186       Primitive.cexpr! 'rb_class_attached_object(klass)'
187     end
189     def rb_singleton_class(obj)
190       Primitive.cexpr! 'rb_singleton_class(obj)'
191     end
193     def rb_aliased_callable_method_entry(cme)
194       _cme = cme.to_i
195       cme_addr = Primitive.cstmt! %{
196         extern const rb_callable_method_entry_t * rb_aliased_callable_method_entry(const rb_callable_method_entry_t *me);
197         return SIZET2NUM((size_t)rb_aliased_callable_method_entry((const rb_callable_method_entry_t *)NUM2SIZET(_cme)));
198       }
199       rb_callable_method_entry_t.new(cme_addr)
200     end
202     def rb_yjit_get_proc_ptr(proc_addr)
203       proc_t_addr = Primitive.cstmt! %{
204         extern rb_proc_t * rjit_get_proc_ptr(VALUE procv);
205         return SIZET2NUM((size_t)rjit_get_proc_ptr((VALUE)NUM2SIZET(proc_addr)));
206       }
207       rb_proc_t.new(proc_t_addr)
208     end
210     def rb_shape_get_shape_by_id(shape_id)
211       _shape_id = shape_id.to_i
212       shape_addr = Primitive.cexpr! 'SIZET2NUM((VALUE)rb_shape_get_shape_by_id((shape_id_t)NUM2UINT(_shape_id)))'
213       rb_shape_t.new(shape_addr)
214     end
216     def rb_iseq_check(iseq)
217       _iseq_addr = iseq.to_i
218       iseq_addr = Primitive.cexpr! 'SIZET2NUM((VALUE)rb_iseq_check((rb_iseq_t *)NUM2SIZET(_iseq_addr)))'
219       rb_iseq_t.new(iseq_addr)
220     end
222     def rb_iseq_path(iseq)
223       _iseq_addr = iseq.to_i
224       Primitive.cexpr! 'rb_iseq_path((rb_iseq_t *)NUM2SIZET(_iseq_addr))'
225     end
227     def vm_ci_argc(ci)
228       _ci_addr = ci.to_i
229       Primitive.cexpr! 'UINT2NUM(vm_ci_argc((CALL_INFO)NUM2SIZET(_ci_addr)))'
230     end
232     def vm_ci_flag(ci)
233       _ci_addr = ci.to_i
234       Primitive.cexpr! 'UINT2NUM(vm_ci_flag((CALL_INFO)NUM2SIZET(_ci_addr)))'
235     end
237     def vm_ci_kwarg(ci)
238       _ci_addr = ci.to_i
239       kwarg_addr = Primitive.cexpr! 'SIZET2NUM((size_t)vm_ci_kwarg((CALL_INFO)NUM2SIZET(_ci_addr)))'
240       kwarg_addr == 0 ? nil : rb_callinfo_kwarg.new(kwarg_addr)
241     end
243     def vm_ci_mid(ci)
244       _ci_addr = ci.to_i
245       Primitive.cexpr! 'SIZET2NUM((size_t)vm_ci_mid((CALL_INFO)NUM2SIZET(_ci_addr)))'
246     end
248     def rjit_opts
249       addr = Primitive.cexpr! 'SIZET2NUM((VALUE)&rb_rjit_opts)'
250       rb_rjit_options.new(addr)
251     end
253     def rjit_cancel_all(reason)
254       Primitive.cstmt! %{
255         rb_rjit_cancel_all(RSTRING_PTR(reason));
256         return Qnil;
257       }
258     end
260     # Convert an encoded VM pointer to an insn BIN.
261     def rb_vm_insn_decode(encoded)
262       # Using rb_vm_insn_addr2opcode to return trace_ insns
263       Primitive.cexpr! 'INT2NUM(rb_vm_insn_addr2opcode((void *)NUM2SIZET(encoded)))'
264     end
266     # Convert Integer VALUE to an actual Ruby object
267     def to_ruby(value)
268       Primitive.cexpr! '(VALUE)NUM2SIZET(value)'
269     end
271     def HAVE_LIBCAPSTONE
272       Primitive.cstmt! %{
273         #ifdef HAVE_LIBCAPSTONE
274           return Qtrue;
275         #else
276           return Qfalse;
277         #endif
278       }
279     end
281     def rjit_exit_traces
282       Primitive.cexpr! 'rjit_exit_traces()'
283     end
285     def rb_vm_ep_local_ep(ep)
286       _ep = ep.to_i
287       lep_addr = Primitive.cexpr! 'SIZET2NUM((size_t)rb_vm_ep_local_ep((const VALUE *)NUM2SIZET(_ep)))'
288       C.VALUE.new(lep_addr)
289     end
291     def rb_hash_keys(hash)
292       Primitive.cexpr! 'rb_hash_keys(hash)'
293     end
295     def rb_hash_stlike_lookup(hash, key)
296       Primitive.cstmt! %{
297         VALUE result = Qnil;
298         rb_hash_stlike_lookup(hash, key, &result);
299         return result;
300       }
301     end
303     def rb_obj_class(obj)
304       Primitive.cexpr! 'rb_obj_class(obj)'
305     end
307     def rb_sym2id(sym)
308       Primitive.cexpr! 'SIZET2NUM((size_t)rb_sym2id(sym))'
309     end
311     def rb_callable_method_entry_or_negative(klass, mid)
312       cme_addr = Primitive.cexpr! 'SIZET2NUM((size_t)rb_callable_method_entry_or_negative(klass, (ID)NUM2SIZET(mid)))'
313       return nil if cme_addr == 0
314       rb_callable_method_entry_t.new(cme_addr)
315     end
317     def rb_method_basic_definition_p(klass, mid)
318       Primitive.cexpr! 'RBOOL(rb_method_basic_definition_p(klass, (ID)NUM2SIZET(mid)))'
319     end
321     def UNDEFINED_METHOD_ENTRY_P(cme)
322       _cme_addr = cme.to_i
323       Primitive.cexpr! 'RBOOL(UNDEFINED_METHOD_ENTRY_P((const rb_callable_method_entry_t *)NUM2SIZET(_cme_addr)))'
324     end
326     def RCLASS_ORIGIN(klass)
327       Primitive.cexpr! 'RCLASS_ORIGIN(klass)'
328     end
330     def RCLASS_SINGLETON_P(klass)
331       Primitive.cexpr! 'RCLASS_SINGLETON_P(klass)'
332     end
333   end
335   #
336   # Utilities: Not used by RJIT, but useful for debugging
337   #
338   class << C
339     # Convert insn BINs to encoded VM pointers.
340     def rb_vm_insn_encode(bin)
341       Primitive.cexpr! 'SIZET2NUM((VALUE)rb_vm_get_insns_address_table()[NUM2INT(bin)])'
342     end
344     # Convert RubyVM::InstructionSequence to C.rb_iseq_t.
345     def rb_iseqw_to_iseq(iseqw)
346       iseq_addr = Primitive.cexpr! 'SIZET2NUM((VALUE)rb_iseqw_to_iseq(iseqw))'
347       rb_iseq_t.new(iseq_addr)
348     end
349   end
351   ### RJIT bindgen begin ###
353   C::UNLIMITED_ARGUMENTS = Primitive.cexpr! %q{ LONG2NUM(UNLIMITED_ARGUMENTS) }
354   C::VM_ENV_DATA_INDEX_ME_CREF = Primitive.cexpr! %q{ LONG2NUM(VM_ENV_DATA_INDEX_ME_CREF) }
355   C::VM_ENV_DATA_INDEX_SPECVAL = Primitive.cexpr! %q{ LONG2NUM(VM_ENV_DATA_INDEX_SPECVAL) }
356   C::ARRAY_REDEFINED_OP_FLAG = Primitive.cexpr! %q{ SIZET2NUM(ARRAY_REDEFINED_OP_FLAG) }
357   C::BOP_AND = Primitive.cexpr! %q{ SIZET2NUM(BOP_AND) }
358   C::BOP_AREF = Primitive.cexpr! %q{ SIZET2NUM(BOP_AREF) }
359   C::BOP_EQ = Primitive.cexpr! %q{ SIZET2NUM(BOP_EQ) }
360   C::BOP_EQQ = Primitive.cexpr! %q{ SIZET2NUM(BOP_EQQ) }
361   C::BOP_FREEZE = Primitive.cexpr! %q{ SIZET2NUM(BOP_FREEZE) }
362   C::BOP_GE = Primitive.cexpr! %q{ SIZET2NUM(BOP_GE) }
363   C::BOP_GT = Primitive.cexpr! %q{ SIZET2NUM(BOP_GT) }
364   C::BOP_LE = Primitive.cexpr! %q{ SIZET2NUM(BOP_LE) }
365   C::BOP_LT = Primitive.cexpr! %q{ SIZET2NUM(BOP_LT) }
366   C::BOP_MINUS = Primitive.cexpr! %q{ SIZET2NUM(BOP_MINUS) }
367   C::BOP_MOD = Primitive.cexpr! %q{ SIZET2NUM(BOP_MOD) }
368   C::BOP_OR = Primitive.cexpr! %q{ SIZET2NUM(BOP_OR) }
369   C::BOP_PLUS = Primitive.cexpr! %q{ SIZET2NUM(BOP_PLUS) }
370   C::BUILTIN_ATTR_LEAF = Primitive.cexpr! %q{ SIZET2NUM(BUILTIN_ATTR_LEAF) }
371   C::HASH_REDEFINED_OP_FLAG = Primitive.cexpr! %q{ SIZET2NUM(HASH_REDEFINED_OP_FLAG) }
372   C::INTEGER_REDEFINED_OP_FLAG = Primitive.cexpr! %q{ SIZET2NUM(INTEGER_REDEFINED_OP_FLAG) }
373   C::INVALID_SHAPE_ID = Primitive.cexpr! %q{ SIZET2NUM(INVALID_SHAPE_ID) }
374   C::METHOD_VISI_PRIVATE = Primitive.cexpr! %q{ SIZET2NUM(METHOD_VISI_PRIVATE) }
375   C::METHOD_VISI_PROTECTED = Primitive.cexpr! %q{ SIZET2NUM(METHOD_VISI_PROTECTED) }
376   C::METHOD_VISI_PUBLIC = Primitive.cexpr! %q{ SIZET2NUM(METHOD_VISI_PUBLIC) }
377   C::METHOD_VISI_UNDEF = Primitive.cexpr! %q{ SIZET2NUM(METHOD_VISI_UNDEF) }
378   C::OBJ_TOO_COMPLEX_SHAPE_ID = Primitive.cexpr! %q{ SIZET2NUM(OBJ_TOO_COMPLEX_SHAPE_ID) }
379   C::OPTIMIZED_METHOD_TYPE_BLOCK_CALL = Primitive.cexpr! %q{ SIZET2NUM(OPTIMIZED_METHOD_TYPE_BLOCK_CALL) }
380   C::OPTIMIZED_METHOD_TYPE_CALL = Primitive.cexpr! %q{ SIZET2NUM(OPTIMIZED_METHOD_TYPE_CALL) }
381   C::OPTIMIZED_METHOD_TYPE_SEND = Primitive.cexpr! %q{ SIZET2NUM(OPTIMIZED_METHOD_TYPE_SEND) }
382   C::OPTIMIZED_METHOD_TYPE_STRUCT_AREF = Primitive.cexpr! %q{ SIZET2NUM(OPTIMIZED_METHOD_TYPE_STRUCT_AREF) }
383   C::OPTIMIZED_METHOD_TYPE_STRUCT_ASET = Primitive.cexpr! %q{ SIZET2NUM(OPTIMIZED_METHOD_TYPE_STRUCT_ASET) }
384   C::RARRAY_EMBED_FLAG = Primitive.cexpr! %q{ SIZET2NUM(RARRAY_EMBED_FLAG) }
385   C::RARRAY_EMBED_LEN_MASK = Primitive.cexpr! %q{ SIZET2NUM(RARRAY_EMBED_LEN_MASK) }
386   C::RARRAY_EMBED_LEN_SHIFT = Primitive.cexpr! %q{ SIZET2NUM(RARRAY_EMBED_LEN_SHIFT) }
387   C::RHASH_PASS_AS_KEYWORDS = Primitive.cexpr! %q{ SIZET2NUM(RHASH_PASS_AS_KEYWORDS) }
388   C::RMODULE_IS_REFINEMENT = Primitive.cexpr! %q{ SIZET2NUM(RMODULE_IS_REFINEMENT) }
389   C::ROBJECT_EMBED = Primitive.cexpr! %q{ SIZET2NUM(ROBJECT_EMBED) }
390   C::RSTRUCT_EMBED_LEN_MASK = Primitive.cexpr! %q{ SIZET2NUM(RSTRUCT_EMBED_LEN_MASK) }
391   C::RUBY_ENCODING_MASK = Primitive.cexpr! %q{ SIZET2NUM(RUBY_ENCODING_MASK) }
392   C::RUBY_EVENT_CLASS = Primitive.cexpr! %q{ SIZET2NUM(RUBY_EVENT_CLASS) }
393   C::RUBY_EVENT_C_CALL = Primitive.cexpr! %q{ SIZET2NUM(RUBY_EVENT_C_CALL) }
394   C::RUBY_EVENT_C_RETURN = Primitive.cexpr! %q{ SIZET2NUM(RUBY_EVENT_C_RETURN) }
395   C::RUBY_FIXNUM_FLAG = Primitive.cexpr! %q{ SIZET2NUM(RUBY_FIXNUM_FLAG) }
396   C::RUBY_FLONUM_FLAG = Primitive.cexpr! %q{ SIZET2NUM(RUBY_FLONUM_FLAG) }
397   C::RUBY_FLONUM_MASK = Primitive.cexpr! %q{ SIZET2NUM(RUBY_FLONUM_MASK) }
398   C::RUBY_FL_FREEZE = Primitive.cexpr! %q{ SIZET2NUM(RUBY_FL_FREEZE) }
399   C::RUBY_IMMEDIATE_MASK = Primitive.cexpr! %q{ SIZET2NUM(RUBY_IMMEDIATE_MASK) }
400   C::RUBY_SPECIAL_SHIFT = Primitive.cexpr! %q{ SIZET2NUM(RUBY_SPECIAL_SHIFT) }
401   C::RUBY_SYMBOL_FLAG = Primitive.cexpr! %q{ SIZET2NUM(RUBY_SYMBOL_FLAG) }
402   C::RUBY_T_ARRAY = Primitive.cexpr! %q{ SIZET2NUM(RUBY_T_ARRAY) }
403   C::RUBY_T_CLASS = Primitive.cexpr! %q{ SIZET2NUM(RUBY_T_CLASS) }
404   C::RUBY_T_HASH = Primitive.cexpr! %q{ SIZET2NUM(RUBY_T_HASH) }
405   C::RUBY_T_ICLASS = Primitive.cexpr! %q{ SIZET2NUM(RUBY_T_ICLASS) }
406   C::RUBY_T_MASK = Primitive.cexpr! %q{ SIZET2NUM(RUBY_T_MASK) }
407   C::RUBY_T_MODULE = Primitive.cexpr! %q{ SIZET2NUM(RUBY_T_MODULE) }
408   C::RUBY_T_OBJECT = Primitive.cexpr! %q{ SIZET2NUM(RUBY_T_OBJECT) }
409   C::RUBY_T_STRING = Primitive.cexpr! %q{ SIZET2NUM(RUBY_T_STRING) }
410   C::RUBY_T_SYMBOL = Primitive.cexpr! %q{ SIZET2NUM(RUBY_T_SYMBOL) }
411   C::SHAPE_FLAG_SHIFT = Primitive.cexpr! %q{ SIZET2NUM(SHAPE_FLAG_SHIFT) }
412   C::SHAPE_FROZEN = Primitive.cexpr! %q{ SIZET2NUM(SHAPE_FROZEN) }
413   C::SHAPE_ID_NUM_BITS = Primitive.cexpr! %q{ SIZET2NUM(SHAPE_ID_NUM_BITS) }
414   C::SHAPE_IVAR = Primitive.cexpr! %q{ SIZET2NUM(SHAPE_IVAR) }
415   C::SHAPE_MASK = Primitive.cexpr! %q{ SIZET2NUM(SHAPE_MASK) }
416   C::SHAPE_ROOT = Primitive.cexpr! %q{ SIZET2NUM(SHAPE_ROOT) }
417   C::STRING_REDEFINED_OP_FLAG = Primitive.cexpr! %q{ SIZET2NUM(STRING_REDEFINED_OP_FLAG) }
418   C::T_OBJECT = Primitive.cexpr! %q{ SIZET2NUM(T_OBJECT) }
419   C::VM_BLOCK_HANDLER_NONE = Primitive.cexpr! %q{ SIZET2NUM(VM_BLOCK_HANDLER_NONE) }
420   C::VM_CALL_ARGS_BLOCKARG = Primitive.cexpr! %q{ SIZET2NUM(VM_CALL_ARGS_BLOCKARG) }
421   C::VM_CALL_ARGS_SPLAT = Primitive.cexpr! %q{ SIZET2NUM(VM_CALL_ARGS_SPLAT) }
422   C::VM_CALL_FCALL = Primitive.cexpr! %q{ SIZET2NUM(VM_CALL_FCALL) }
423   C::VM_CALL_KWARG = Primitive.cexpr! %q{ SIZET2NUM(VM_CALL_KWARG) }
424   C::VM_CALL_KW_SPLAT = Primitive.cexpr! %q{ SIZET2NUM(VM_CALL_KW_SPLAT) }
425   C::VM_CALL_KW_SPLAT_MUT = Primitive.cexpr! %q{ SIZET2NUM(VM_CALL_KW_SPLAT_MUT) }
426   C::VM_CALL_KW_SPLAT_bit = Primitive.cexpr! %q{ SIZET2NUM(VM_CALL_KW_SPLAT_bit) }
427   C::VM_CALL_OPT_SEND = Primitive.cexpr! %q{ SIZET2NUM(VM_CALL_OPT_SEND) }
428   C::VM_CALL_TAILCALL = Primitive.cexpr! %q{ SIZET2NUM(VM_CALL_TAILCALL) }
429   C::VM_CALL_TAILCALL_bit = Primitive.cexpr! %q{ SIZET2NUM(VM_CALL_TAILCALL_bit) }
430   C::VM_CALL_ZSUPER = Primitive.cexpr! %q{ SIZET2NUM(VM_CALL_ZSUPER) }
431   C::VM_ENV_DATA_INDEX_FLAGS = Primitive.cexpr! %q{ SIZET2NUM(VM_ENV_DATA_INDEX_FLAGS) }
432   C::VM_ENV_DATA_SIZE = Primitive.cexpr! %q{ SIZET2NUM(VM_ENV_DATA_SIZE) }
433   C::VM_ENV_FLAG_LOCAL = Primitive.cexpr! %q{ SIZET2NUM(VM_ENV_FLAG_LOCAL) }
434   C::VM_ENV_FLAG_WB_REQUIRED = Primitive.cexpr! %q{ SIZET2NUM(VM_ENV_FLAG_WB_REQUIRED) }
435   C::VM_FRAME_FLAG_BMETHOD = Primitive.cexpr! %q{ SIZET2NUM(VM_FRAME_FLAG_BMETHOD) }
436   C::VM_FRAME_FLAG_CFRAME = Primitive.cexpr! %q{ SIZET2NUM(VM_FRAME_FLAG_CFRAME) }
437   C::VM_FRAME_FLAG_CFRAME_KW = Primitive.cexpr! %q{ SIZET2NUM(VM_FRAME_FLAG_CFRAME_KW) }
438   C::VM_FRAME_FLAG_LAMBDA = Primitive.cexpr! %q{ SIZET2NUM(VM_FRAME_FLAG_LAMBDA) }
439   C::VM_FRAME_FLAG_MODIFIED_BLOCK_PARAM = Primitive.cexpr! %q{ SIZET2NUM(VM_FRAME_FLAG_MODIFIED_BLOCK_PARAM) }
440   C::VM_FRAME_MAGIC_BLOCK = Primitive.cexpr! %q{ SIZET2NUM(VM_FRAME_MAGIC_BLOCK) }
441   C::VM_FRAME_MAGIC_CFUNC = Primitive.cexpr! %q{ SIZET2NUM(VM_FRAME_MAGIC_CFUNC) }
442   C::VM_FRAME_MAGIC_METHOD = Primitive.cexpr! %q{ SIZET2NUM(VM_FRAME_MAGIC_METHOD) }
443   C::VM_METHOD_TYPE_ALIAS = Primitive.cexpr! %q{ SIZET2NUM(VM_METHOD_TYPE_ALIAS) }
444   C::VM_METHOD_TYPE_ATTRSET = Primitive.cexpr! %q{ SIZET2NUM(VM_METHOD_TYPE_ATTRSET) }
445   C::VM_METHOD_TYPE_BMETHOD = Primitive.cexpr! %q{ SIZET2NUM(VM_METHOD_TYPE_BMETHOD) }
446   C::VM_METHOD_TYPE_CFUNC = Primitive.cexpr! %q{ SIZET2NUM(VM_METHOD_TYPE_CFUNC) }
447   C::VM_METHOD_TYPE_ISEQ = Primitive.cexpr! %q{ SIZET2NUM(VM_METHOD_TYPE_ISEQ) }
448   C::VM_METHOD_TYPE_IVAR = Primitive.cexpr! %q{ SIZET2NUM(VM_METHOD_TYPE_IVAR) }
449   C::VM_METHOD_TYPE_MISSING = Primitive.cexpr! %q{ SIZET2NUM(VM_METHOD_TYPE_MISSING) }
450   C::VM_METHOD_TYPE_NOTIMPLEMENTED = Primitive.cexpr! %q{ SIZET2NUM(VM_METHOD_TYPE_NOTIMPLEMENTED) }
451   C::VM_METHOD_TYPE_OPTIMIZED = Primitive.cexpr! %q{ SIZET2NUM(VM_METHOD_TYPE_OPTIMIZED) }
452   C::VM_METHOD_TYPE_REFINED = Primitive.cexpr! %q{ SIZET2NUM(VM_METHOD_TYPE_REFINED) }
453   C::VM_METHOD_TYPE_UNDEF = Primitive.cexpr! %q{ SIZET2NUM(VM_METHOD_TYPE_UNDEF) }
454   C::VM_METHOD_TYPE_ZSUPER = Primitive.cexpr! %q{ SIZET2NUM(VM_METHOD_TYPE_ZSUPER) }
455   C::VM_SPECIAL_OBJECT_VMCORE = Primitive.cexpr! %q{ SIZET2NUM(VM_SPECIAL_OBJECT_VMCORE) }
457   def C.block_type_iseq = Primitive.cexpr!(%q{ SIZET2NUM(block_type_iseq) })
458   def C.idRespond_to_missing = Primitive.cexpr!(%q{ SIZET2NUM(idRespond_to_missing) })
459   def C.imemo_callinfo = Primitive.cexpr!(%q{ SIZET2NUM(imemo_callinfo) })
460   def C.imemo_iseq = Primitive.cexpr!(%q{ SIZET2NUM(imemo_iseq) })
461   def C.rb_block_param_proxy = Primitive.cexpr!(%q{ SIZET2NUM(rb_block_param_proxy) })
462   def C.rb_cArray = Primitive.cexpr!(%q{ SIZET2NUM(rb_cArray) })
463   def C.rb_cFalseClass = Primitive.cexpr!(%q{ SIZET2NUM(rb_cFalseClass) })
464   def C.rb_cFloat = Primitive.cexpr!(%q{ SIZET2NUM(rb_cFloat) })
465   def C.rb_cInteger = Primitive.cexpr!(%q{ SIZET2NUM(rb_cInteger) })
466   def C.rb_cNilClass = Primitive.cexpr!(%q{ SIZET2NUM(rb_cNilClass) })
467   def C.rb_cString = Primitive.cexpr!(%q{ SIZET2NUM(rb_cString) })
468   def C.rb_cSymbol = Primitive.cexpr!(%q{ SIZET2NUM(rb_cSymbol) })
469   def C.rb_cTrueClass = Primitive.cexpr!(%q{ SIZET2NUM(rb_cTrueClass) })
470   def C.rb_mRubyVMFrozenCore = Primitive.cexpr!(%q{ SIZET2NUM(rb_mRubyVMFrozenCore) })
471   def C.rb_rjit_global_events = Primitive.cexpr!(%q{ SIZET2NUM(rb_rjit_global_events) })
472   def C.rb_vm_insns_count = Primitive.cexpr!(%q{ SIZET2NUM(rb_vm_insns_count) })
474   def C.rb_ary_clear
475     Primitive.cexpr! %q{ SIZET2NUM((size_t)rb_ary_clear) }
476   end
478   def C.rb_ary_dup
479     Primitive.cexpr! %q{ SIZET2NUM((size_t)rb_ary_dup) }
480   end
482   def C.rb_ary_entry_internal
483     Primitive.cexpr! %q{ SIZET2NUM((size_t)rb_ary_entry_internal) }
484   end
486   def C.rb_ary_push
487     Primitive.cexpr! %q{ SIZET2NUM((size_t)rb_ary_push) }
488   end
490   def C.rb_ary_resurrect
491     Primitive.cexpr! %q{ SIZET2NUM((size_t)rb_ary_resurrect) }
492   end
494   def C.rb_ary_store
495     Primitive.cexpr! %q{ SIZET2NUM((size_t)rb_ary_store) }
496   end
498   def C.rb_ary_tmp_new_from_values
499     Primitive.cexpr! %q{ SIZET2NUM((size_t)rb_ary_tmp_new_from_values) }
500   end
502   def C.rb_ary_unshift_m
503     Primitive.cexpr! %q{ SIZET2NUM((size_t)rb_ary_unshift_m) }
504   end
506   def C.rb_backref_get
507     Primitive.cexpr! %q{ SIZET2NUM((size_t)rb_backref_get) }
508   end
510   def C.rb_ec_ary_new_from_values
511     Primitive.cexpr! %q{ SIZET2NUM((size_t)rb_ec_ary_new_from_values) }
512   end
514   def C.rb_ec_str_resurrect
515     Primitive.cexpr! %q{ SIZET2NUM((size_t)rb_ec_str_resurrect) }
516   end
518   def C.rb_ensure_iv_list_size
519     Primitive.cexpr! %q{ SIZET2NUM((size_t)rb_ensure_iv_list_size) }
520   end
522   def C.rb_fix_aref
523     Primitive.cexpr! %q{ SIZET2NUM((size_t)rb_fix_aref) }
524   end
526   def C.rb_fix_div_fix
527     Primitive.cexpr! %q{ SIZET2NUM((size_t)rb_fix_div_fix) }
528   end
530   def C.rb_fix_mod_fix
531     Primitive.cexpr! %q{ SIZET2NUM((size_t)rb_fix_mod_fix) }
532   end
534   def C.rb_fix_mul_fix
535     Primitive.cexpr! %q{ SIZET2NUM((size_t)rb_fix_mul_fix) }
536   end
538   def C.rb_gc_writebarrier
539     Primitive.cexpr! %q{ SIZET2NUM((size_t)rb_gc_writebarrier) }
540   end
542   def C.rb_get_symbol_id
543     Primitive.cexpr! %q{ SIZET2NUM((size_t)rb_get_symbol_id) }
544   end
546   def C.rb_gvar_get
547     Primitive.cexpr! %q{ SIZET2NUM((size_t)rb_gvar_get) }
548   end
550   def C.rb_hash_aref
551     Primitive.cexpr! %q{ SIZET2NUM((size_t)rb_hash_aref) }
552   end
554   def C.rb_hash_aset
555     Primitive.cexpr! %q{ SIZET2NUM((size_t)rb_hash_aset) }
556   end
558   def C.rb_hash_bulk_insert
559     Primitive.cexpr! %q{ SIZET2NUM((size_t)rb_hash_bulk_insert) }
560   end
562   def C.rb_hash_new
563     Primitive.cexpr! %q{ SIZET2NUM((size_t)rb_hash_new) }
564   end
566   def C.rb_hash_new_with_size
567     Primitive.cexpr! %q{ SIZET2NUM((size_t)rb_hash_new_with_size) }
568   end
570   def C.rb_hash_resurrect
571     Primitive.cexpr! %q{ SIZET2NUM((size_t)rb_hash_resurrect) }
572   end
574   def C.rb_ivar_defined
575     Primitive.cexpr! %q{ SIZET2NUM((size_t)rb_ivar_defined) }
576   end
578   def C.rb_ivar_get
579     Primitive.cexpr! %q{ SIZET2NUM((size_t)rb_ivar_get) }
580   end
582   def C.rb_obj_as_string_result
583     Primitive.cexpr! %q{ SIZET2NUM((size_t)rb_obj_as_string_result) }
584   end
586   def C.rb_obj_is_kind_of
587     Primitive.cexpr! %q{ SIZET2NUM((size_t)rb_obj_is_kind_of) }
588   end
590   def C.rb_range_new
591     Primitive.cexpr! %q{ SIZET2NUM((size_t)rb_range_new) }
592   end
594   def C.rb_reg_last_match
595     Primitive.cexpr! %q{ SIZET2NUM((size_t)rb_reg_last_match) }
596   end
598   def C.rb_reg_match_last
599     Primitive.cexpr! %q{ SIZET2NUM((size_t)rb_reg_match_last) }
600   end
602   def C.rb_reg_match_post
603     Primitive.cexpr! %q{ SIZET2NUM((size_t)rb_reg_match_post) }
604   end
606   def C.rb_reg_match_pre
607     Primitive.cexpr! %q{ SIZET2NUM((size_t)rb_reg_match_pre) }
608   end
610   def C.rb_reg_new_ary
611     Primitive.cexpr! %q{ SIZET2NUM((size_t)rb_reg_new_ary) }
612   end
614   def C.rb_reg_nth_match
615     Primitive.cexpr! %q{ SIZET2NUM((size_t)rb_reg_nth_match) }
616   end
618   def C.rb_rjit_branch_stub_hit
619     Primitive.cexpr! %q{ SIZET2NUM((size_t)rb_rjit_branch_stub_hit) }
620   end
622   def C.rb_rjit_entry_stub_hit
623     Primitive.cexpr! %q{ SIZET2NUM((size_t)rb_rjit_entry_stub_hit) }
624   end
626   def C.rb_str_buf_append
627     Primitive.cexpr! %q{ SIZET2NUM((size_t)rb_str_buf_append) }
628   end
630   def C.rb_str_bytesize
631     Primitive.cexpr! %q{ SIZET2NUM((size_t)rb_str_bytesize) }
632   end
634   def C.rb_str_concat_literals
635     Primitive.cexpr! %q{ SIZET2NUM((size_t)rb_str_concat_literals) }
636   end
638   def C.rb_str_dup
639     Primitive.cexpr! %q{ SIZET2NUM((size_t)rb_str_dup) }
640   end
642   def C.rb_str_eql_internal
643     Primitive.cexpr! %q{ SIZET2NUM((size_t)rb_str_eql_internal) }
644   end
646   def C.rb_str_getbyte
647     Primitive.cexpr! %q{ SIZET2NUM((size_t)rb_str_getbyte) }
648   end
650   def C.rb_str_intern
651     Primitive.cexpr! %q{ SIZET2NUM((size_t)rb_str_intern) }
652   end
654   def C.rb_sym_to_proc
655     Primitive.cexpr! %q{ SIZET2NUM((size_t)rb_sym_to_proc) }
656   end
658   def C.rb_vm_bh_to_procval
659     Primitive.cexpr! %q{ SIZET2NUM((size_t)rb_vm_bh_to_procval) }
660   end
662   def C.rb_vm_concat_array
663     Primitive.cexpr! %q{ SIZET2NUM((size_t)rb_vm_concat_array) }
664   end
666   def C.rb_vm_defined
667     Primitive.cexpr! %q{ SIZET2NUM((size_t)rb_vm_defined) }
668   end
670   def C.rb_vm_get_ev_const
671     Primitive.cexpr! %q{ SIZET2NUM((size_t)rb_vm_get_ev_const) }
672   end
674   def C.rb_vm_getclassvariable
675     Primitive.cexpr! %q{ SIZET2NUM((size_t)rb_vm_getclassvariable) }
676   end
678   def C.rb_vm_ic_hit_p
679     Primitive.cexpr! %q{ SIZET2NUM((size_t)rb_vm_ic_hit_p) }
680   end
682   def C.rb_vm_opt_newarray_hash
683     Primitive.cexpr! %q{ SIZET2NUM((size_t)rb_vm_opt_newarray_hash) }
684   end
686   def C.rb_vm_opt_newarray_max
687     Primitive.cexpr! %q{ SIZET2NUM((size_t)rb_vm_opt_newarray_max) }
688   end
690   def C.rb_vm_opt_newarray_min
691     Primitive.cexpr! %q{ SIZET2NUM((size_t)rb_vm_opt_newarray_min) }
692   end
694   def C.rb_vm_opt_newarray_pack
695     Primitive.cexpr! %q{ SIZET2NUM((size_t)rb_vm_opt_newarray_pack) }
696   end
698   def C.rb_vm_set_ivar_id
699     Primitive.cexpr! %q{ SIZET2NUM((size_t)rb_vm_set_ivar_id) }
700   end
702   def C.rb_vm_setclassvariable
703     Primitive.cexpr! %q{ SIZET2NUM((size_t)rb_vm_setclassvariable) }
704   end
706   def C.rb_vm_setinstancevariable
707     Primitive.cexpr! %q{ SIZET2NUM((size_t)rb_vm_setinstancevariable) }
708   end
710   def C.rb_vm_splat_array
711     Primitive.cexpr! %q{ SIZET2NUM((size_t)rb_vm_splat_array) }
712   end
714   def C.rb_vm_throw
715     Primitive.cexpr! %q{ SIZET2NUM((size_t)rb_vm_throw) }
716   end
718   def C.rb_vm_yield_with_cfunc
719     Primitive.cexpr! %q{ SIZET2NUM((size_t)rb_vm_yield_with_cfunc) }
720   end
722   def C.rjit_build_kwhash
723     Primitive.cexpr! %q{ SIZET2NUM((size_t)rjit_build_kwhash) }
724   end
726   def C.rjit_full_cfunc_return
727     Primitive.cexpr! %q{ SIZET2NUM((size_t)rjit_full_cfunc_return) }
728   end
730   def C.rjit_optimized_call
731     Primitive.cexpr! %q{ SIZET2NUM((size_t)rjit_optimized_call) }
732   end
734   def C.rjit_rb_ary_subseq_length
735     Primitive.cexpr! %q{ SIZET2NUM((size_t)rjit_rb_ary_subseq_length) }
736   end
738   def C.rjit_record_exit_stack
739     Primitive.cexpr! %q{ SIZET2NUM((size_t)rjit_record_exit_stack) }
740   end
742   def C.rjit_str_neq_internal
743     Primitive.cexpr! %q{ SIZET2NUM((size_t)rjit_str_neq_internal) }
744   end
746   def C.rjit_str_simple_append
747     Primitive.cexpr! %q{ SIZET2NUM((size_t)rjit_str_simple_append) }
748   end
750   def C.CALL_DATA
751     @CALL_DATA ||= self.rb_call_data
752   end
754   def C.IC
755     @IC ||= self.iseq_inline_constant_cache
756   end
758   def C.ID
759     @ID ||= CType::Immediate.parse("unsigned long")
760   end
762   def C.IVC
763     @IVC ||= self.iseq_inline_iv_cache_entry
764   end
766   def C.RArray
767     @RArray ||= CType::Struct.new(
768       "RArray", Primitive.cexpr!("SIZEOF(struct RArray)"),
769       basic: [self.RBasic, Primitive.cexpr!("OFFSETOF((*((struct RArray *)NULL)), basic)")],
770       as: [CType::Union.new(
771         "", Primitive.cexpr!("SIZEOF(((struct RArray *)NULL)->as)"),
772         heap: CType::Struct.new(
773           "", Primitive.cexpr!("SIZEOF(((struct RArray *)NULL)->as.heap)"),
774           len: [CType::Immediate.parse("long"), Primitive.cexpr!("OFFSETOF(((struct RArray *)NULL)->as.heap, len)")],
775           aux: [CType::Union.new(
776             "", Primitive.cexpr!("SIZEOF(((struct RArray *)NULL)->as.heap.aux)"),
777             capa: CType::Immediate.parse("long"),
778             shared_root: self.VALUE,
779           ), Primitive.cexpr!("OFFSETOF(((struct RArray *)NULL)->as.heap, aux)")],
780           ptr: [CType::Pointer.new { self.VALUE }, Primitive.cexpr!("OFFSETOF(((struct RArray *)NULL)->as.heap, ptr)")],
781         ),
782         ary: CType::Array.new { self.VALUE },
783       ), Primitive.cexpr!("OFFSETOF((*((struct RArray *)NULL)), as)")],
784     )
785   end
787   def C.RB_BUILTIN
788     @RB_BUILTIN ||= self.rb_builtin_function
789   end
791   def C.RBasic
792     @RBasic ||= CType::Struct.new(
793       "RBasic", Primitive.cexpr!("SIZEOF(struct RBasic)"),
794       flags: [self.VALUE, Primitive.cexpr!("OFFSETOF((*((struct RBasic *)NULL)), flags)")],
795       klass: [self.VALUE, Primitive.cexpr!("OFFSETOF((*((struct RBasic *)NULL)), klass)")],
796     )
797   end
799   def C.RObject
800     @RObject ||= CType::Struct.new(
801       "RObject", Primitive.cexpr!("SIZEOF(struct RObject)"),
802       basic: [self.RBasic, Primitive.cexpr!("OFFSETOF((*((struct RObject *)NULL)), basic)")],
803       as: [CType::Union.new(
804         "", Primitive.cexpr!("SIZEOF(((struct RObject *)NULL)->as)"),
805         heap: CType::Struct.new(
806           "", Primitive.cexpr!("SIZEOF(((struct RObject *)NULL)->as.heap)"),
807           ivptr: [CType::Pointer.new { self.VALUE }, Primitive.cexpr!("OFFSETOF(((struct RObject *)NULL)->as.heap, ivptr)")],
808           iv_index_tbl: [CType::Pointer.new { self.rb_id_table }, Primitive.cexpr!("OFFSETOF(((struct RObject *)NULL)->as.heap, iv_index_tbl)")],
809         ),
810         ary: CType::Array.new { self.VALUE },
811       ), Primitive.cexpr!("OFFSETOF((*((struct RObject *)NULL)), as)")],
812     )
813   end
815   def C.RString
816     @RString ||= CType::Struct.new(
817       "RString", Primitive.cexpr!("SIZEOF(struct RString)"),
818       basic: [self.RBasic, Primitive.cexpr!("OFFSETOF((*((struct RString *)NULL)), basic)")],
819       len: [CType::Immediate.parse("long"), Primitive.cexpr!("OFFSETOF((*((struct RString *)NULL)), len)")],
820       as: [CType::Union.new(
821         "", Primitive.cexpr!("SIZEOF(((struct RString *)NULL)->as)"),
822         heap: CType::Struct.new(
823           "", Primitive.cexpr!("SIZEOF(((struct RString *)NULL)->as.heap)"),
824           ptr: [CType::Pointer.new { CType::Immediate.parse("char") }, Primitive.cexpr!("OFFSETOF(((struct RString *)NULL)->as.heap, ptr)")],
825           aux: [CType::Union.new(
826             "", Primitive.cexpr!("SIZEOF(((struct RString *)NULL)->as.heap.aux)"),
827             capa: CType::Immediate.parse("long"),
828             shared: self.VALUE,
829           ), Primitive.cexpr!("OFFSETOF(((struct RString *)NULL)->as.heap, aux)")],
830         ),
831         embed: CType::Struct.new(
832           "", Primitive.cexpr!("SIZEOF(((struct RString *)NULL)->as.embed)"),
833           ary: [CType::Array.new { CType::Immediate.parse("char") }, Primitive.cexpr!("OFFSETOF(((struct RString *)NULL)->as.embed, ary)")],
834         ),
835       ), Primitive.cexpr!("OFFSETOF((*((struct RString *)NULL)), as)")],
836     )
837   end
839   def C.RStruct
840     @RStruct ||= CType::Struct.new(
841       "RStruct", Primitive.cexpr!("SIZEOF(struct RStruct)"),
842       basic: [self.RBasic, Primitive.cexpr!("OFFSETOF((*((struct RStruct *)NULL)), basic)")],
843       as: [CType::Union.new(
844         "", Primitive.cexpr!("SIZEOF(((struct RStruct *)NULL)->as)"),
845         heap: CType::Struct.new(
846           "", Primitive.cexpr!("SIZEOF(((struct RStruct *)NULL)->as.heap)"),
847           len: [CType::Immediate.parse("long"), Primitive.cexpr!("OFFSETOF(((struct RStruct *)NULL)->as.heap, len)")],
848           ptr: [CType::Pointer.new { self.VALUE }, Primitive.cexpr!("OFFSETOF(((struct RStruct *)NULL)->as.heap, ptr)")],
849         ),
850         ary: CType::Array.new { self.VALUE },
851       ), Primitive.cexpr!("OFFSETOF((*((struct RStruct *)NULL)), as)")],
852     )
853   end
855   def C.attr_index_t
856     @attr_index_t ||= CType::Immediate.parse("uint32_t")
857   end
859   def C.iseq_inline_constant_cache
860     @iseq_inline_constant_cache ||= CType::Struct.new(
861       "iseq_inline_constant_cache", Primitive.cexpr!("SIZEOF(struct iseq_inline_constant_cache)"),
862       entry: [CType::Pointer.new { self.iseq_inline_constant_cache_entry }, Primitive.cexpr!("OFFSETOF((*((struct iseq_inline_constant_cache *)NULL)), entry)")],
863       segments: [CType::Pointer.new { self.ID }, Primitive.cexpr!("OFFSETOF((*((struct iseq_inline_constant_cache *)NULL)), segments)")],
864     )
865   end
867   def C.iseq_inline_constant_cache_entry
868     @iseq_inline_constant_cache_entry ||= CType::Struct.new(
869       "iseq_inline_constant_cache_entry", Primitive.cexpr!("SIZEOF(struct iseq_inline_constant_cache_entry)"),
870       flags: [self.VALUE, Primitive.cexpr!("OFFSETOF((*((struct iseq_inline_constant_cache_entry *)NULL)), flags)")],
871       value: [self.VALUE, Primitive.cexpr!("OFFSETOF((*((struct iseq_inline_constant_cache_entry *)NULL)), value)")],
872       _unused1: [self.VALUE, Primitive.cexpr!("OFFSETOF((*((struct iseq_inline_constant_cache_entry *)NULL)), _unused1)")],
873       _unused2: [self.VALUE, Primitive.cexpr!("OFFSETOF((*((struct iseq_inline_constant_cache_entry *)NULL)), _unused2)")],
874       ic_cref: [CType::Pointer.new { self.rb_cref_t }, Primitive.cexpr!("OFFSETOF((*((struct iseq_inline_constant_cache_entry *)NULL)), ic_cref)")],
875     )
876   end
878   def C.iseq_inline_iv_cache_entry
879     @iseq_inline_iv_cache_entry ||= CType::Struct.new(
880       "iseq_inline_iv_cache_entry", Primitive.cexpr!("SIZEOF(struct iseq_inline_iv_cache_entry)"),
881       value: [CType::Immediate.parse("uintptr_t"), Primitive.cexpr!("OFFSETOF((*((struct iseq_inline_iv_cache_entry *)NULL)), value)")],
882       iv_set_name: [self.ID, Primitive.cexpr!("OFFSETOF((*((struct iseq_inline_iv_cache_entry *)NULL)), iv_set_name)")],
883     )
884   end
886   def C.iseq_inline_storage_entry
887     @iseq_inline_storage_entry ||= CType::Union.new(
888       "iseq_inline_storage_entry", Primitive.cexpr!("SIZEOF(union iseq_inline_storage_entry)"),
889       once: CType::Struct.new(
890         "", Primitive.cexpr!("SIZEOF(((union iseq_inline_storage_entry *)NULL)->once)"),
891         running_thread: [CType::Pointer.new { self.rb_thread_struct }, Primitive.cexpr!("OFFSETOF(((union iseq_inline_storage_entry *)NULL)->once, running_thread)")],
892         value: [self.VALUE, Primitive.cexpr!("OFFSETOF(((union iseq_inline_storage_entry *)NULL)->once, value)")],
893       ),
894       ic_cache: self.iseq_inline_constant_cache,
895       iv_cache: self.iseq_inline_iv_cache_entry,
896     )
897   end
899   def C.method_optimized_type
900     @method_optimized_type ||= CType::Immediate.parse("int")
901   end
903   def C.rb_block
904     @rb_block ||= CType::Struct.new(
905       "rb_block", Primitive.cexpr!("SIZEOF(struct rb_block)"),
906       as: [CType::Union.new(
907         "", Primitive.cexpr!("SIZEOF(((struct rb_block *)NULL)->as)"),
908         captured: self.rb_captured_block,
909         symbol: self.VALUE,
910         proc: self.VALUE,
911       ), Primitive.cexpr!("OFFSETOF((*((struct rb_block *)NULL)), as)")],
912       type: [self.rb_block_type, Primitive.cexpr!("OFFSETOF((*((struct rb_block *)NULL)), type)")],
913     )
914   end
916   def C.rb_block_type
917     @rb_block_type ||= CType::Immediate.parse("int")
918   end
920   def C.rb_builtin_function
921     @rb_builtin_function ||= CType::Struct.new(
922       "rb_builtin_function", Primitive.cexpr!("SIZEOF(struct rb_builtin_function)"),
923       func_ptr: [CType::Immediate.parse("void *"), Primitive.cexpr!("OFFSETOF((*((struct rb_builtin_function *)NULL)), func_ptr)")],
924       argc: [CType::Immediate.parse("int"), Primitive.cexpr!("OFFSETOF((*((struct rb_builtin_function *)NULL)), argc)")],
925       index: [CType::Immediate.parse("int"), Primitive.cexpr!("OFFSETOF((*((struct rb_builtin_function *)NULL)), index)")],
926       name: [CType::Pointer.new { CType::Immediate.parse("char") }, Primitive.cexpr!("OFFSETOF((*((struct rb_builtin_function *)NULL)), name)")],
927     )
928   end
930   def C.rb_call_data
931     @rb_call_data ||= CType::Struct.new(
932       "rb_call_data", Primitive.cexpr!("SIZEOF(struct rb_call_data)"),
933       ci: [CType::Pointer.new { self.rb_callinfo }, Primitive.cexpr!("OFFSETOF((*((struct rb_call_data *)NULL)), ci)")],
934       cc: [CType::Pointer.new { self.rb_callcache }, Primitive.cexpr!("OFFSETOF((*((struct rb_call_data *)NULL)), cc)")],
935     )
936   end
938   def C.rb_callable_method_entry_struct
939     @rb_callable_method_entry_struct ||= CType::Struct.new(
940       "rb_callable_method_entry_struct", Primitive.cexpr!("SIZEOF(struct rb_callable_method_entry_struct)"),
941       flags: [self.VALUE, Primitive.cexpr!("OFFSETOF((*((struct rb_callable_method_entry_struct *)NULL)), flags)")],
942       defined_class: [self.VALUE, Primitive.cexpr!("OFFSETOF((*((struct rb_callable_method_entry_struct *)NULL)), defined_class)"), true],
943       def: [CType::Pointer.new { self.rb_method_definition_struct }, Primitive.cexpr!("OFFSETOF((*((struct rb_callable_method_entry_struct *)NULL)), def)")],
944       called_id: [self.ID, Primitive.cexpr!("OFFSETOF((*((struct rb_callable_method_entry_struct *)NULL)), called_id)")],
945       owner: [self.VALUE, Primitive.cexpr!("OFFSETOF((*((struct rb_callable_method_entry_struct *)NULL)), owner)")],
946     )
947   end
949   def C.rb_callable_method_entry_t
950     @rb_callable_method_entry_t ||= CType::Struct.new(
951       "rb_callable_method_entry_struct", Primitive.cexpr!("SIZEOF(struct rb_callable_method_entry_struct)"),
952       flags: [self.VALUE, Primitive.cexpr!("OFFSETOF((*((struct rb_callable_method_entry_struct *)NULL)), flags)")],
953       defined_class: [self.VALUE, Primitive.cexpr!("OFFSETOF((*((struct rb_callable_method_entry_struct *)NULL)), defined_class)"), true],
954       def: [CType::Pointer.new { self.rb_method_definition_struct }, Primitive.cexpr!("OFFSETOF((*((struct rb_callable_method_entry_struct *)NULL)), def)")],
955       called_id: [self.ID, Primitive.cexpr!("OFFSETOF((*((struct rb_callable_method_entry_struct *)NULL)), called_id)")],
956       owner: [self.VALUE, Primitive.cexpr!("OFFSETOF((*((struct rb_callable_method_entry_struct *)NULL)), owner)")],
957     )
958   end
960   def C.rb_callcache
961     @rb_callcache ||= CType::Struct.new(
962       "rb_callcache", Primitive.cexpr!("SIZEOF(struct rb_callcache)"),
963       flags: [self.VALUE, Primitive.cexpr!("OFFSETOF((*((struct rb_callcache *)NULL)), flags)")],
964       klass: [self.VALUE, Primitive.cexpr!("OFFSETOF((*((struct rb_callcache *)NULL)), klass)")],
965       cme_: [CType::Pointer.new { self.rb_callable_method_entry_struct }, Primitive.cexpr!("OFFSETOF((*((struct rb_callcache *)NULL)), cme_)")],
966       call_: [self.vm_call_handler, Primitive.cexpr!("OFFSETOF((*((struct rb_callcache *)NULL)), call_)")],
967       aux_: [CType::Union.new(
968         "", Primitive.cexpr!("SIZEOF(((struct rb_callcache *)NULL)->aux_)"),
969         attr: CType::Struct.new(
970           "", Primitive.cexpr!("SIZEOF(((struct rb_callcache *)NULL)->aux_.attr)"),
971           value: [CType::Immediate.parse("uintptr_t"), Primitive.cexpr!("OFFSETOF(((struct rb_callcache *)NULL)->aux_.attr, value)")],
972         ),
973         method_missing_reason: self.method_missing_reason,
974         v: self.VALUE,
975         bf: CType::Pointer.new { self.rb_builtin_function },
976       ), Primitive.cexpr!("OFFSETOF((*((struct rb_callcache *)NULL)), aux_)")],
977     )
978   end
980   def C.rb_callinfo
981     @rb_callinfo ||= CType::Struct.new(
982       "rb_callinfo", Primitive.cexpr!("SIZEOF(struct rb_callinfo)"),
983       flags: [self.VALUE, Primitive.cexpr!("OFFSETOF((*((struct rb_callinfo *)NULL)), flags)")],
984       kwarg: [CType::Pointer.new { self.rb_callinfo_kwarg }, Primitive.cexpr!("OFFSETOF((*((struct rb_callinfo *)NULL)), kwarg)")],
985       mid: [self.VALUE, Primitive.cexpr!("OFFSETOF((*((struct rb_callinfo *)NULL)), mid)")],
986       flag: [self.VALUE, Primitive.cexpr!("OFFSETOF((*((struct rb_callinfo *)NULL)), flag)")],
987       argc: [self.VALUE, Primitive.cexpr!("OFFSETOF((*((struct rb_callinfo *)NULL)), argc)")],
988     )
989   end
991   def C.rb_callinfo_kwarg
992     @rb_callinfo_kwarg ||= CType::Struct.new(
993       "rb_callinfo_kwarg", Primitive.cexpr!("SIZEOF(struct rb_callinfo_kwarg)"),
994       keyword_len: [CType::Immediate.parse("int"), Primitive.cexpr!("OFFSETOF((*((struct rb_callinfo_kwarg *)NULL)), keyword_len)")],
995       references: [CType::Immediate.parse("int"), Primitive.cexpr!("OFFSETOF((*((struct rb_callinfo_kwarg *)NULL)), references)")],
996       keywords: [CType::Immediate.parse("void *"), Primitive.cexpr!("OFFSETOF((*((struct rb_callinfo_kwarg *)NULL)), keywords)")],
997     )
998   end
1000   def C.rb_captured_block
1001     @rb_captured_block ||= CType::Struct.new(
1002       "rb_captured_block", Primitive.cexpr!("SIZEOF(struct rb_captured_block)"),
1003       self: [self.VALUE, Primitive.cexpr!("OFFSETOF((*((struct rb_captured_block *)NULL)), self)")],
1004       ep: [CType::Pointer.new { self.VALUE }, Primitive.cexpr!("OFFSETOF((*((struct rb_captured_block *)NULL)), ep)")],
1005       code: [CType::Union.new(
1006         "", Primitive.cexpr!("SIZEOF(((struct rb_captured_block *)NULL)->code)"),
1007         iseq: CType::Pointer.new { self.rb_iseq_t },
1008         ifunc: CType::Pointer.new { self.vm_ifunc },
1009         val: self.VALUE,
1010       ), Primitive.cexpr!("OFFSETOF((*((struct rb_captured_block *)NULL)), code)")],
1011     )
1012   end
1014   def C.rb_cfunc_t
1015     @rb_cfunc_t ||= self.VALUE
1016   end
1018   def C.rb_control_frame_t
1019     @rb_control_frame_t ||= CType::Struct.new(
1020       "rb_control_frame_struct", Primitive.cexpr!("SIZEOF(struct rb_control_frame_struct)"),
1021       pc: [CType::Pointer.new { self.VALUE }, Primitive.cexpr!("OFFSETOF((*((struct rb_control_frame_struct *)NULL)), pc)")],
1022       sp: [CType::Pointer.new { self.VALUE }, Primitive.cexpr!("OFFSETOF((*((struct rb_control_frame_struct *)NULL)), sp)")],
1023       iseq: [CType::Pointer.new { self.rb_iseq_t }, Primitive.cexpr!("OFFSETOF((*((struct rb_control_frame_struct *)NULL)), iseq)")],
1024       self: [self.VALUE, Primitive.cexpr!("OFFSETOF((*((struct rb_control_frame_struct *)NULL)), self)")],
1025       ep: [CType::Pointer.new { self.VALUE }, Primitive.cexpr!("OFFSETOF((*((struct rb_control_frame_struct *)NULL)), ep)")],
1026       block_code: [CType::Immediate.parse("void *"), Primitive.cexpr!("OFFSETOF((*((struct rb_control_frame_struct *)NULL)), block_code)")],
1027       jit_return: [CType::Pointer.new { CType::Immediate.parse("void") }, Primitive.cexpr!("OFFSETOF((*((struct rb_control_frame_struct *)NULL)), jit_return)")],
1028     )
1029   end
1031   def C.rb_cref_t
1032     @rb_cref_t ||= CType::Struct.new(
1033       "rb_cref_struct", Primitive.cexpr!("SIZEOF(struct rb_cref_struct)"),
1034       flags: [self.VALUE, Primitive.cexpr!("OFFSETOF((*((struct rb_cref_struct *)NULL)), flags)")],
1035       refinements: [self.VALUE, Primitive.cexpr!("OFFSETOF((*((struct rb_cref_struct *)NULL)), refinements)")],
1036       klass_or_self: [self.VALUE, Primitive.cexpr!("OFFSETOF((*((struct rb_cref_struct *)NULL)), klass_or_self)")],
1037       next: [CType::Pointer.new { self.rb_cref_struct }, Primitive.cexpr!("OFFSETOF((*((struct rb_cref_struct *)NULL)), next)")],
1038       scope_visi: [self.rb_scope_visibility_t, Primitive.cexpr!("OFFSETOF((*((struct rb_cref_struct *)NULL)), scope_visi)")],
1039     )
1040   end
1042   def C.rb_execution_context_struct
1043     @rb_execution_context_struct ||= CType::Struct.new(
1044       "rb_execution_context_struct", Primitive.cexpr!("SIZEOF(struct rb_execution_context_struct)"),
1045       vm_stack: [CType::Pointer.new { self.VALUE }, Primitive.cexpr!("OFFSETOF((*((struct rb_execution_context_struct *)NULL)), vm_stack)")],
1046       vm_stack_size: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_execution_context_struct *)NULL)), vm_stack_size)")],
1047       cfp: [CType::Pointer.new { self.rb_control_frame_t }, Primitive.cexpr!("OFFSETOF((*((struct rb_execution_context_struct *)NULL)), cfp)")],
1048       tag: [CType::Pointer.new { self.rb_vm_tag }, Primitive.cexpr!("OFFSETOF((*((struct rb_execution_context_struct *)NULL)), tag)")],
1049       interrupt_flag: [self.rb_atomic_t, Primitive.cexpr!("OFFSETOF((*((struct rb_execution_context_struct *)NULL)), interrupt_flag)")],
1050       interrupt_mask: [self.rb_atomic_t, Primitive.cexpr!("OFFSETOF((*((struct rb_execution_context_struct *)NULL)), interrupt_mask)")],
1051       fiber_ptr: [CType::Pointer.new { self.rb_fiber_t }, Primitive.cexpr!("OFFSETOF((*((struct rb_execution_context_struct *)NULL)), fiber_ptr)")],
1052       thread_ptr: [CType::Pointer.new { self.rb_thread_struct }, Primitive.cexpr!("OFFSETOF((*((struct rb_execution_context_struct *)NULL)), thread_ptr)")],
1053       local_storage: [CType::Pointer.new { self.rb_id_table }, Primitive.cexpr!("OFFSETOF((*((struct rb_execution_context_struct *)NULL)), local_storage)")],
1054       local_storage_recursive_hash: [self.VALUE, Primitive.cexpr!("OFFSETOF((*((struct rb_execution_context_struct *)NULL)), local_storage_recursive_hash)")],
1055       local_storage_recursive_hash_for_trace: [self.VALUE, Primitive.cexpr!("OFFSETOF((*((struct rb_execution_context_struct *)NULL)), local_storage_recursive_hash_for_trace)")],
1056       storage: [self.VALUE, Primitive.cexpr!("OFFSETOF((*((struct rb_execution_context_struct *)NULL)), storage)")],
1057       root_lep: [CType::Pointer.new { self.VALUE }, Primitive.cexpr!("OFFSETOF((*((struct rb_execution_context_struct *)NULL)), root_lep)")],
1058       root_svar: [self.VALUE, Primitive.cexpr!("OFFSETOF((*((struct rb_execution_context_struct *)NULL)), root_svar)")],
1059       ensure_list: [CType::Pointer.new { self.rb_ensure_list_t }, Primitive.cexpr!("OFFSETOF((*((struct rb_execution_context_struct *)NULL)), ensure_list)")],
1060       trace_arg: [CType::Pointer.new { self.rb_trace_arg_struct }, Primitive.cexpr!("OFFSETOF((*((struct rb_execution_context_struct *)NULL)), trace_arg)")],
1061       errinfo: [self.VALUE, Primitive.cexpr!("OFFSETOF((*((struct rb_execution_context_struct *)NULL)), errinfo)")],
1062       passed_block_handler: [self.VALUE, Primitive.cexpr!("OFFSETOF((*((struct rb_execution_context_struct *)NULL)), passed_block_handler)")],
1063       raised_flag: [CType::Immediate.parse("uint8_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_execution_context_struct *)NULL)), raised_flag)")],
1064       private_const_reference: [self.VALUE, Primitive.cexpr!("OFFSETOF((*((struct rb_execution_context_struct *)NULL)), private_const_reference)")],
1065       machine: [CType::Struct.new(
1066         "", Primitive.cexpr!("SIZEOF(((struct rb_execution_context_struct *)NULL)->machine)"),
1067         stack_start: [CType::Pointer.new { self.VALUE }, Primitive.cexpr!("OFFSETOF(((struct rb_execution_context_struct *)NULL)->machine, stack_start)")],
1068         stack_end: [CType::Pointer.new { self.VALUE }, Primitive.cexpr!("OFFSETOF(((struct rb_execution_context_struct *)NULL)->machine, stack_end)")],
1069         stack_maxsize: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF(((struct rb_execution_context_struct *)NULL)->machine, stack_maxsize)")],
1070       ), Primitive.cexpr!("OFFSETOF((*((struct rb_execution_context_struct *)NULL)), machine)")],
1071     )
1072   end
1074   def C.rb_execution_context_t
1075     @rb_execution_context_t ||= self.rb_execution_context_struct
1076   end
1078   def C.rb_iseq_constant_body
1079     @rb_iseq_constant_body ||= CType::Struct.new(
1080       "rb_iseq_constant_body", Primitive.cexpr!("SIZEOF(struct rb_iseq_constant_body)"),
1081       type: [self.rb_iseq_type, Primitive.cexpr!("OFFSETOF((*((struct rb_iseq_constant_body *)NULL)), type)")],
1082       iseq_size: [CType::Immediate.parse("unsigned int"), Primitive.cexpr!("OFFSETOF((*((struct rb_iseq_constant_body *)NULL)), iseq_size)")],
1083       iseq_encoded: [CType::Pointer.new { self.VALUE }, Primitive.cexpr!("OFFSETOF((*((struct rb_iseq_constant_body *)NULL)), iseq_encoded)")],
1084       param: [CType::Struct.new(
1085         "", Primitive.cexpr!("SIZEOF(((struct rb_iseq_constant_body *)NULL)->param)"),
1086         flags: [CType::Struct.new(
1087           "", Primitive.cexpr!("SIZEOF(((struct rb_iseq_constant_body *)NULL)->param.flags)"),
1088           has_lead: [CType::BitField.new(1, 0), 0],
1089           has_opt: [CType::BitField.new(1, 1), 1],
1090           has_rest: [CType::BitField.new(1, 2), 2],
1091           has_post: [CType::BitField.new(1, 3), 3],
1092           has_kw: [CType::BitField.new(1, 4), 4],
1093           has_kwrest: [CType::BitField.new(1, 5), 5],
1094           has_block: [CType::BitField.new(1, 6), 6],
1095           ambiguous_param0: [CType::BitField.new(1, 7), 7],
1096           accepts_no_kwarg: [CType::BitField.new(1, 0), 8],
1097           ruby2_keywords: [CType::BitField.new(1, 1), 9],
1098           anon_rest: [CType::BitField.new(1, 2), 10],
1099           anon_kwrest: [CType::BitField.new(1, 3), 11],
1100           use_block: [CType::BitField.new(1, 4), 12],
1101         ), Primitive.cexpr!("OFFSETOF(((struct rb_iseq_constant_body *)NULL)->param, flags)")],
1102         size: [CType::Immediate.parse("unsigned int"), Primitive.cexpr!("OFFSETOF(((struct rb_iseq_constant_body *)NULL)->param, size)")],
1103         lead_num: [CType::Immediate.parse("int"), Primitive.cexpr!("OFFSETOF(((struct rb_iseq_constant_body *)NULL)->param, lead_num)")],
1104         opt_num: [CType::Immediate.parse("int"), Primitive.cexpr!("OFFSETOF(((struct rb_iseq_constant_body *)NULL)->param, opt_num)")],
1105         rest_start: [CType::Immediate.parse("int"), Primitive.cexpr!("OFFSETOF(((struct rb_iseq_constant_body *)NULL)->param, rest_start)")],
1106         post_start: [CType::Immediate.parse("int"), Primitive.cexpr!("OFFSETOF(((struct rb_iseq_constant_body *)NULL)->param, post_start)")],
1107         post_num: [CType::Immediate.parse("int"), Primitive.cexpr!("OFFSETOF(((struct rb_iseq_constant_body *)NULL)->param, post_num)")],
1108         block_start: [CType::Immediate.parse("int"), Primitive.cexpr!("OFFSETOF(((struct rb_iseq_constant_body *)NULL)->param, block_start)")],
1109         opt_table: [CType::Pointer.new { self.VALUE }, Primitive.cexpr!("OFFSETOF(((struct rb_iseq_constant_body *)NULL)->param, opt_table)")],
1110         keyword: [CType::Pointer.new { self.rb_iseq_param_keyword }, Primitive.cexpr!("OFFSETOF(((struct rb_iseq_constant_body *)NULL)->param, keyword)")],
1111       ), Primitive.cexpr!("OFFSETOF((*((struct rb_iseq_constant_body *)NULL)), param)")],
1112       location: [self.rb_iseq_location_t, Primitive.cexpr!("OFFSETOF((*((struct rb_iseq_constant_body *)NULL)), location)")],
1113       insns_info: [self.iseq_insn_info, Primitive.cexpr!("OFFSETOF((*((struct rb_iseq_constant_body *)NULL)), insns_info)")],
1114       local_table: [CType::Pointer.new { self.ID }, Primitive.cexpr!("OFFSETOF((*((struct rb_iseq_constant_body *)NULL)), local_table)")],
1115       catch_table: [CType::Pointer.new { self.iseq_catch_table }, Primitive.cexpr!("OFFSETOF((*((struct rb_iseq_constant_body *)NULL)), catch_table)")],
1116       parent_iseq: [CType::Pointer.new { self.rb_iseq_struct }, Primitive.cexpr!("OFFSETOF((*((struct rb_iseq_constant_body *)NULL)), parent_iseq)")],
1117       local_iseq: [CType::Pointer.new { self.rb_iseq_struct }, Primitive.cexpr!("OFFSETOF((*((struct rb_iseq_constant_body *)NULL)), local_iseq)")],
1118       is_entries: [CType::Pointer.new { self.iseq_inline_storage_entry }, Primitive.cexpr!("OFFSETOF((*((struct rb_iseq_constant_body *)NULL)), is_entries)")],
1119       call_data: [CType::Pointer.new { self.rb_call_data }, Primitive.cexpr!("OFFSETOF((*((struct rb_iseq_constant_body *)NULL)), call_data)")],
1120       variable: [CType::Struct.new(
1121         "", Primitive.cexpr!("SIZEOF(((struct rb_iseq_constant_body *)NULL)->variable)"),
1122         flip_count: [self.rb_snum_t, Primitive.cexpr!("OFFSETOF(((struct rb_iseq_constant_body *)NULL)->variable, flip_count)")],
1123         script_lines: [self.VALUE, Primitive.cexpr!("OFFSETOF(((struct rb_iseq_constant_body *)NULL)->variable, script_lines)")],
1124         coverage: [self.VALUE, Primitive.cexpr!("OFFSETOF(((struct rb_iseq_constant_body *)NULL)->variable, coverage)")],
1125         pc2branchindex: [self.VALUE, Primitive.cexpr!("OFFSETOF(((struct rb_iseq_constant_body *)NULL)->variable, pc2branchindex)")],
1126         original_iseq: [CType::Pointer.new { self.VALUE }, Primitive.cexpr!("OFFSETOF(((struct rb_iseq_constant_body *)NULL)->variable, original_iseq)")],
1127       ), Primitive.cexpr!("OFFSETOF((*((struct rb_iseq_constant_body *)NULL)), variable)")],
1128       local_table_size: [CType::Immediate.parse("unsigned int"), Primitive.cexpr!("OFFSETOF((*((struct rb_iseq_constant_body *)NULL)), local_table_size)")],
1129       ic_size: [CType::Immediate.parse("unsigned int"), Primitive.cexpr!("OFFSETOF((*((struct rb_iseq_constant_body *)NULL)), ic_size)")],
1130       ise_size: [CType::Immediate.parse("unsigned int"), Primitive.cexpr!("OFFSETOF((*((struct rb_iseq_constant_body *)NULL)), ise_size)")],
1131       ivc_size: [CType::Immediate.parse("unsigned int"), Primitive.cexpr!("OFFSETOF((*((struct rb_iseq_constant_body *)NULL)), ivc_size)")],
1132       icvarc_size: [CType::Immediate.parse("unsigned int"), Primitive.cexpr!("OFFSETOF((*((struct rb_iseq_constant_body *)NULL)), icvarc_size)")],
1133       ci_size: [CType::Immediate.parse("unsigned int"), Primitive.cexpr!("OFFSETOF((*((struct rb_iseq_constant_body *)NULL)), ci_size)")],
1134       stack_max: [CType::Immediate.parse("unsigned int"), Primitive.cexpr!("OFFSETOF((*((struct rb_iseq_constant_body *)NULL)), stack_max)")],
1135       builtin_attrs: [CType::Immediate.parse("unsigned int"), Primitive.cexpr!("OFFSETOF((*((struct rb_iseq_constant_body *)NULL)), builtin_attrs)")],
1136       prism: [self._Bool, Primitive.cexpr!("OFFSETOF((*((struct rb_iseq_constant_body *)NULL)), prism)")],
1137       mark_bits: [CType::Union.new(
1138         "", Primitive.cexpr!("SIZEOF(((struct rb_iseq_constant_body *)NULL)->mark_bits)"),
1139         list: CType::Pointer.new { self.iseq_bits_t },
1140         single: self.iseq_bits_t,
1141       ), Primitive.cexpr!("OFFSETOF((*((struct rb_iseq_constant_body *)NULL)), mark_bits)")],
1142       outer_variables: [CType::Pointer.new { self.rb_id_table }, Primitive.cexpr!("OFFSETOF((*((struct rb_iseq_constant_body *)NULL)), outer_variables)")],
1143       mandatory_only_iseq: [CType::Pointer.new { self.rb_iseq_t }, Primitive.cexpr!("OFFSETOF((*((struct rb_iseq_constant_body *)NULL)), mandatory_only_iseq)")],
1144       jit_entry: [self.rb_jit_func_t, Primitive.cexpr!("OFFSETOF((*((struct rb_iseq_constant_body *)NULL)), jit_entry)")],
1145       jit_entry_calls: [CType::Immediate.parse("unsigned long"), Primitive.cexpr!("OFFSETOF((*((struct rb_iseq_constant_body *)NULL)), jit_entry_calls)")],
1146       rjit_blocks: [self.VALUE, Primitive.cexpr!("OFFSETOF((*((struct rb_iseq_constant_body *)NULL)), rjit_blocks)"), true],
1147     )
1148   end
1150   def C.rb_iseq_location_t
1151     @rb_iseq_location_t ||= CType::Struct.new(
1152       "rb_iseq_location_struct", Primitive.cexpr!("SIZEOF(struct rb_iseq_location_struct)"),
1153       pathobj: [self.VALUE, Primitive.cexpr!("OFFSETOF((*((struct rb_iseq_location_struct *)NULL)), pathobj)"), true],
1154       base_label: [self.VALUE, Primitive.cexpr!("OFFSETOF((*((struct rb_iseq_location_struct *)NULL)), base_label)"), true],
1155       label: [self.VALUE, Primitive.cexpr!("OFFSETOF((*((struct rb_iseq_location_struct *)NULL)), label)"), true],
1156       first_lineno: [CType::Immediate.parse("int"), Primitive.cexpr!("OFFSETOF((*((struct rb_iseq_location_struct *)NULL)), first_lineno)")],
1157       node_id: [CType::Immediate.parse("int"), Primitive.cexpr!("OFFSETOF((*((struct rb_iseq_location_struct *)NULL)), node_id)")],
1158       code_location: [self.rb_code_location_t, Primitive.cexpr!("OFFSETOF((*((struct rb_iseq_location_struct *)NULL)), code_location)")],
1159     )
1160   end
1162   def C.rb_iseq_param_keyword
1163     @rb_iseq_param_keyword ||= CType::Struct.new(
1164       "rb_iseq_param_keyword", Primitive.cexpr!("SIZEOF(struct rb_iseq_param_keyword)"),
1165       num: [CType::Immediate.parse("int"), Primitive.cexpr!("OFFSETOF((*((struct rb_iseq_param_keyword *)NULL)), num)")],
1166       required_num: [CType::Immediate.parse("int"), Primitive.cexpr!("OFFSETOF((*((struct rb_iseq_param_keyword *)NULL)), required_num)")],
1167       bits_start: [CType::Immediate.parse("int"), Primitive.cexpr!("OFFSETOF((*((struct rb_iseq_param_keyword *)NULL)), bits_start)")],
1168       rest_start: [CType::Immediate.parse("int"), Primitive.cexpr!("OFFSETOF((*((struct rb_iseq_param_keyword *)NULL)), rest_start)")],
1169       table: [CType::Pointer.new { self.ID }, Primitive.cexpr!("OFFSETOF((*((struct rb_iseq_param_keyword *)NULL)), table)")],
1170       default_values: [CType::Pointer.new { self.VALUE }, Primitive.cexpr!("OFFSETOF((*((struct rb_iseq_param_keyword *)NULL)), default_values)")],
1171     )
1172   end
1174   def C.rb_iseq_struct
1175     @rb_iseq_struct ||= CType::Struct.new(
1176       "rb_iseq_struct", Primitive.cexpr!("SIZEOF(struct rb_iseq_struct)"),
1177       flags: [self.VALUE, Primitive.cexpr!("OFFSETOF((*((struct rb_iseq_struct *)NULL)), flags)")],
1178       wrapper: [self.VALUE, Primitive.cexpr!("OFFSETOF((*((struct rb_iseq_struct *)NULL)), wrapper)")],
1179       body: [CType::Pointer.new { self.rb_iseq_constant_body }, Primitive.cexpr!("OFFSETOF((*((struct rb_iseq_struct *)NULL)), body)")],
1180       aux: [CType::Union.new(
1181         "", Primitive.cexpr!("SIZEOF(((struct rb_iseq_struct *)NULL)->aux)"),
1182         compile_data: CType::Pointer.new { self.iseq_compile_data },
1183         loader: CType::Struct.new(
1184           "", Primitive.cexpr!("SIZEOF(((struct rb_iseq_struct *)NULL)->aux.loader)"),
1185           obj: [self.VALUE, Primitive.cexpr!("OFFSETOF(((struct rb_iseq_struct *)NULL)->aux.loader, obj)")],
1186           index: [CType::Immediate.parse("int"), Primitive.cexpr!("OFFSETOF(((struct rb_iseq_struct *)NULL)->aux.loader, index)")],
1187         ),
1188         exec: CType::Struct.new(
1189           "", Primitive.cexpr!("SIZEOF(((struct rb_iseq_struct *)NULL)->aux.exec)"),
1190           local_hooks: [CType::Pointer.new { self.rb_hook_list_struct }, Primitive.cexpr!("OFFSETOF(((struct rb_iseq_struct *)NULL)->aux.exec, local_hooks)")],
1191           global_trace_events: [self.rb_event_flag_t, Primitive.cexpr!("OFFSETOF(((struct rb_iseq_struct *)NULL)->aux.exec, global_trace_events)")],
1192         ),
1193       ), Primitive.cexpr!("OFFSETOF((*((struct rb_iseq_struct *)NULL)), aux)")],
1194     )
1195   end
1197   def C.rb_iseq_t
1198     @rb_iseq_t ||= self.rb_iseq_struct
1199   end
1201   def C.rb_jit_func_t
1202     @rb_jit_func_t ||= CType::Immediate.parse("void *")
1203   end
1205   def C.rb_method_attr_t
1206     @rb_method_attr_t ||= CType::Struct.new(
1207       "rb_method_attr_struct", Primitive.cexpr!("SIZEOF(struct rb_method_attr_struct)"),
1208       id: [self.ID, Primitive.cexpr!("OFFSETOF((*((struct rb_method_attr_struct *)NULL)), id)")],
1209       location: [self.VALUE, Primitive.cexpr!("OFFSETOF((*((struct rb_method_attr_struct *)NULL)), location)")],
1210     )
1211   end
1213   def C.rb_method_bmethod_t
1214     @rb_method_bmethod_t ||= CType::Struct.new(
1215       "rb_method_bmethod_struct", Primitive.cexpr!("SIZEOF(struct rb_method_bmethod_struct)"),
1216       proc: [self.VALUE, Primitive.cexpr!("OFFSETOF((*((struct rb_method_bmethod_struct *)NULL)), proc)")],
1217       hooks: [CType::Pointer.new { self.rb_hook_list_struct }, Primitive.cexpr!("OFFSETOF((*((struct rb_method_bmethod_struct *)NULL)), hooks)")],
1218       defined_ractor: [self.VALUE, Primitive.cexpr!("OFFSETOF((*((struct rb_method_bmethod_struct *)NULL)), defined_ractor)")],
1219     )
1220   end
1222   def C.rb_method_cfunc_t
1223     @rb_method_cfunc_t ||= CType::Struct.new(
1224       "rb_method_cfunc_struct", Primitive.cexpr!("SIZEOF(struct rb_method_cfunc_struct)"),
1225       func: [self.rb_cfunc_t, Primitive.cexpr!("OFFSETOF((*((struct rb_method_cfunc_struct *)NULL)), func)")],
1226       invoker: [CType::Immediate.parse("void *"), Primitive.cexpr!("OFFSETOF((*((struct rb_method_cfunc_struct *)NULL)), invoker)")],
1227       argc: [CType::Immediate.parse("int"), Primitive.cexpr!("OFFSETOF((*((struct rb_method_cfunc_struct *)NULL)), argc)")],
1228     )
1229   end
1231   def C.rb_method_definition_struct
1232     @rb_method_definition_struct ||= CType::Struct.new(
1233       "rb_method_definition_struct", Primitive.cexpr!("SIZEOF(struct rb_method_definition_struct)"),
1234       type: [CType::BitField.new(4, 0), 0],
1235       iseq_overload: [CType::BitField.new(1, 4), 4],
1236       no_redef_warning: [CType::BitField.new(1, 5), 5],
1237       aliased: [CType::BitField.new(1, 6), 6],
1238       reference_count: [CType::BitField.new(28, 0), 32],
1239       body: [CType::Union.new(
1240         "", Primitive.cexpr!("SIZEOF(((struct rb_method_definition_struct *)NULL)->body)"),
1241         iseq: self.rb_method_iseq_t,
1242         cfunc: self.rb_method_cfunc_t,
1243         attr: self.rb_method_attr_t,
1244         alias: self.rb_method_alias_t,
1245         refined: self.rb_method_refined_t,
1246         bmethod: self.rb_method_bmethod_t,
1247         optimized: self.rb_method_optimized_t,
1248       ), Primitive.cexpr!("OFFSETOF((*((struct rb_method_definition_struct *)NULL)), body)")],
1249       original_id: [self.ID, Primitive.cexpr!("OFFSETOF((*((struct rb_method_definition_struct *)NULL)), original_id)")],
1250       method_serial: [CType::Immediate.parse("uintptr_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_method_definition_struct *)NULL)), method_serial)")],
1251     )
1252   end
1254   def C.rb_method_entry_t
1255     @rb_method_entry_t ||= CType::Struct.new(
1256       "rb_method_entry_struct", Primitive.cexpr!("SIZEOF(struct rb_method_entry_struct)"),
1257       flags: [self.VALUE, Primitive.cexpr!("OFFSETOF((*((struct rb_method_entry_struct *)NULL)), flags)")],
1258       defined_class: [self.VALUE, Primitive.cexpr!("OFFSETOF((*((struct rb_method_entry_struct *)NULL)), defined_class)")],
1259       def: [CType::Pointer.new { self.rb_method_definition_struct }, Primitive.cexpr!("OFFSETOF((*((struct rb_method_entry_struct *)NULL)), def)")],
1260       called_id: [self.ID, Primitive.cexpr!("OFFSETOF((*((struct rb_method_entry_struct *)NULL)), called_id)")],
1261       owner: [self.VALUE, Primitive.cexpr!("OFFSETOF((*((struct rb_method_entry_struct *)NULL)), owner)")],
1262     )
1263   end
1265   def C.rb_method_iseq_t
1266     @rb_method_iseq_t ||= CType::Struct.new(
1267       "rb_method_iseq_struct", Primitive.cexpr!("SIZEOF(struct rb_method_iseq_struct)"),
1268       iseqptr: [CType::Pointer.new { self.rb_iseq_t }, Primitive.cexpr!("OFFSETOF((*((struct rb_method_iseq_struct *)NULL)), iseqptr)")],
1269       cref: [CType::Pointer.new { self.rb_cref_t }, Primitive.cexpr!("OFFSETOF((*((struct rb_method_iseq_struct *)NULL)), cref)")],
1270     )
1271   end
1273   def C.rb_method_optimized_t
1274     @rb_method_optimized_t ||= CType::Struct.new(
1275       "rb_method_optimized", Primitive.cexpr!("SIZEOF(struct rb_method_optimized)"),
1276       type: [self.method_optimized_type, Primitive.cexpr!("OFFSETOF((*((struct rb_method_optimized *)NULL)), type)")],
1277       index: [CType::Immediate.parse("unsigned int"), Primitive.cexpr!("OFFSETOF((*((struct rb_method_optimized *)NULL)), index)")],
1278     )
1279   end
1281   def C.rb_method_type_t
1282     @rb_method_type_t ||= CType::Immediate.parse("int")
1283   end
1285   def C.rb_proc_t
1286     @rb_proc_t ||= CType::Struct.new(
1287       "", Primitive.cexpr!("SIZEOF(rb_proc_t)"),
1288       block: [self.rb_block, Primitive.cexpr!("OFFSETOF((*((rb_proc_t *)NULL)), block)")],
1289     )
1290   end
1292   def C.rb_rjit_options
1293     @rb_rjit_options ||= CType::Struct.new(
1294       "rb_rjit_options", Primitive.cexpr!("SIZEOF(struct rb_rjit_options)"),
1295       on: [self._Bool, Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_options *)NULL)), on)")],
1296       exec_mem_size: [CType::Immediate.parse("unsigned int"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_options *)NULL)), exec_mem_size)")],
1297       call_threshold: [CType::Immediate.parse("unsigned int"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_options *)NULL)), call_threshold)")],
1298       stats: [self._Bool, Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_options *)NULL)), stats)")],
1299       disable: [self._Bool, Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_options *)NULL)), disable)")],
1300       trace: [self._Bool, Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_options *)NULL)), trace)")],
1301       trace_exits: [self._Bool, Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_options *)NULL)), trace_exits)")],
1302       dump_disasm: [self._Bool, Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_options *)NULL)), dump_disasm)")],
1303       verify_ctx: [self._Bool, Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_options *)NULL)), verify_ctx)")],
1304     )
1305   end
1307   def C.rb_rjit_runtime_counters
1308     @rb_rjit_runtime_counters ||= CType::Struct.new(
1309       "rb_rjit_runtime_counters", Primitive.cexpr!("SIZEOF(struct rb_rjit_runtime_counters)"),
1310       rjit_insns_count: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), rjit_insns_count)")],
1311       send_args_splat_kw_splat: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), send_args_splat_kw_splat)")],
1312       send_args_splat: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), send_args_splat)")],
1313       send_args_splat_not_array: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), send_args_splat_not_array)")],
1314       send_args_splat_length_not_equal: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), send_args_splat_length_not_equal)")],
1315       send_args_splat_cfunc_var_args: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), send_args_splat_cfunc_var_args)")],
1316       send_args_splat_arity_error: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), send_args_splat_arity_error)")],
1317       send_args_splat_ruby2_hash: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), send_args_splat_ruby2_hash)")],
1318       send_args_splat_cfunc_zuper: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), send_args_splat_cfunc_zuper)")],
1319       send_args_splat_cfunc_ruby2_keywords: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), send_args_splat_cfunc_ruby2_keywords)")],
1320       send_kw_splat: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), send_kw_splat)")],
1321       send_kwarg: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), send_kwarg)")],
1322       send_klass_megamorphic: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), send_klass_megamorphic)")],
1323       send_missing_cme: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), send_missing_cme)")],
1324       send_private: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), send_private)")],
1325       send_protected_check_failed: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), send_protected_check_failed)")],
1326       send_tailcall: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), send_tailcall)")],
1327       send_notimplemented: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), send_notimplemented)")],
1328       send_missing: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), send_missing)")],
1329       send_bmethod: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), send_bmethod)")],
1330       send_alias: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), send_alias)")],
1331       send_undef: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), send_undef)")],
1332       send_zsuper: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), send_zsuper)")],
1333       send_refined: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), send_refined)")],
1334       send_stackoverflow: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), send_stackoverflow)")],
1335       send_arity: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), send_arity)")],
1336       send_c_tracing: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), send_c_tracing)")],
1337       send_is_a_class_mismatch: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), send_is_a_class_mismatch)")],
1338       send_instance_of_class_mismatch: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), send_instance_of_class_mismatch)")],
1339       send_keywords: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), send_keywords)")],
1340       send_blockiseq: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), send_blockiseq)")],
1341       send_block_handler: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), send_block_handler)")],
1342       send_block_setup: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), send_block_setup)")],
1343       send_block_not_nil: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), send_block_not_nil)")],
1344       send_block_not_proxy: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), send_block_not_proxy)")],
1345       send_block_arg: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), send_block_arg)")],
1346       send_iseq_kwparam: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), send_iseq_kwparam)")],
1347       send_iseq_accepts_no_kwarg: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), send_iseq_accepts_no_kwarg)")],
1348       send_iseq_has_opt: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), send_iseq_has_opt)")],
1349       send_iseq_has_kwrest: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), send_iseq_has_kwrest)")],
1350       send_iseq_ruby2_keywords: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), send_iseq_ruby2_keywords)")],
1351       send_iseq_has_rest_and_captured: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), send_iseq_has_rest_and_captured)")],
1352       send_iseq_has_rest_and_kw_supplied: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), send_iseq_has_rest_and_kw_supplied)")],
1353       send_iseq_has_no_kw: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), send_iseq_has_no_kw)")],
1354       send_iseq_zsuper: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), send_iseq_zsuper)")],
1355       send_iseq_materialized_block: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), send_iseq_materialized_block)")],
1356       send_iseq_has_rest: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), send_iseq_has_rest)")],
1357       send_iseq_block_arg0_splat: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), send_iseq_block_arg0_splat)")],
1358       send_iseq_kw_call: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), send_iseq_kw_call)")],
1359       send_iseq_kw_splat: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), send_iseq_kw_splat)")],
1360       send_iseq_splat: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), send_iseq_splat)")],
1361       send_iseq_has_rest_and_optional: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), send_iseq_has_rest_and_optional)")],
1362       send_iseq_arity_error: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), send_iseq_arity_error)")],
1363       send_iseq_missing_optional_kw: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), send_iseq_missing_optional_kw)")],
1364       send_iseq_too_many_kwargs: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), send_iseq_too_many_kwargs)")],
1365       send_iseq_kwargs_mismatch: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), send_iseq_kwargs_mismatch)")],
1366       send_iseq_splat_with_kw: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), send_iseq_splat_with_kw)")],
1367       send_iseq_splat_arity_error: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), send_iseq_splat_arity_error)")],
1368       send_iseq_has_rest_and_splat_not_equal: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), send_iseq_has_rest_and_splat_not_equal)")],
1369       send_cfunc_variadic: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), send_cfunc_variadic)")],
1370       send_cfunc_too_many_args: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), send_cfunc_too_many_args)")],
1371       send_cfunc_ruby_array_varg: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), send_cfunc_ruby_array_varg)")],
1372       send_cfunc_splat_with_kw: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), send_cfunc_splat_with_kw)")],
1373       send_cfunc_tracing: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), send_cfunc_tracing)")],
1374       send_cfunc_argc_mismatch: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), send_cfunc_argc_mismatch)")],
1375       send_cfunc_toomany_args: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), send_cfunc_toomany_args)")],
1376       send_attrset_splat: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), send_attrset_splat)")],
1377       send_attrset_kwarg: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), send_attrset_kwarg)")],
1378       send_attrset_method: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), send_attrset_method)")],
1379       send_ivar_splat: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), send_ivar_splat)")],
1380       send_ivar_opt_send: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), send_ivar_opt_send)")],
1381       send_optimized_send_no_args: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), send_optimized_send_no_args)")],
1382       send_optimized_send_not_sym_or_str: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), send_optimized_send_not_sym_or_str)")],
1383       send_optimized_send_mid_class_changed: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), send_optimized_send_mid_class_changed)")],
1384       send_optimized_send_mid_id_changed: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), send_optimized_send_mid_id_changed)")],
1385       send_optimized_send_null_mid: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), send_optimized_send_null_mid)")],
1386       send_optimized_send_send: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), send_optimized_send_send)")],
1387       send_optimized_call_block: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), send_optimized_call_block)")],
1388       send_optimized_call_kwarg: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), send_optimized_call_kwarg)")],
1389       send_optimized_call_splat: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), send_optimized_call_splat)")],
1390       send_optimized_struct_aref_error: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), send_optimized_struct_aref_error)")],
1391       send_optimized_block_call: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), send_optimized_block_call)")],
1392       send_optimized_struct_aset: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), send_optimized_struct_aset)")],
1393       send_bmethod_not_iseq: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), send_bmethod_not_iseq)")],
1394       send_bmethod_blockarg: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), send_bmethod_blockarg)")],
1395       invokesuper_me_changed: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), invokesuper_me_changed)")],
1396       invokesuper_block: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), invokesuper_block)")],
1397       invokeblock_none: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), invokeblock_none)")],
1398       invokeblock_symbol: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), invokeblock_symbol)")],
1399       invokeblock_proc: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), invokeblock_proc)")],
1400       invokeblock_tag_changed: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), invokeblock_tag_changed)")],
1401       invokeblock_iseq_block_changed: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), invokeblock_iseq_block_changed)")],
1402       invokeblock_iseq_arity: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), invokeblock_iseq_arity)")],
1403       invokeblock_iseq_arg0_splat: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), invokeblock_iseq_arg0_splat)")],
1404       invokeblock_ifunc_args_splat: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), invokeblock_ifunc_args_splat)")],
1405       invokeblock_ifunc_kw_splat: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), invokeblock_ifunc_kw_splat)")],
1406       invokeblock_iseq_arg0_args_splat: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), invokeblock_iseq_arg0_args_splat)")],
1407       invokeblock_iseq_arg0_has_kw: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), invokeblock_iseq_arg0_has_kw)")],
1408       getivar_megamorphic: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), getivar_megamorphic)")],
1409       getivar_not_heap: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), getivar_not_heap)")],
1410       getivar_special_const: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), getivar_special_const)")],
1411       getivar_too_complex: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), getivar_too_complex)")],
1412       optaref_arg_not_fixnum: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), optaref_arg_not_fixnum)")],
1413       optaref_argc_not_one: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), optaref_argc_not_one)")],
1414       optaref_recv_not_array: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), optaref_recv_not_array)")],
1415       optaref_recv_not_hash: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), optaref_recv_not_hash)")],
1416       optaref_send: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), optaref_send)")],
1417       optgetconst_not_cached: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), optgetconst_not_cached)")],
1418       optgetconst_cref: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), optgetconst_cref)")],
1419       optgetconst_cache_miss: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), optgetconst_cache_miss)")],
1420       setivar_frozen: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), setivar_frozen)")],
1421       setivar_not_heap: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), setivar_not_heap)")],
1422       setivar_megamorphic: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), setivar_megamorphic)")],
1423       setivar_too_complex: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), setivar_too_complex)")],
1424       expandarray_splat: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), expandarray_splat)")],
1425       expandarray_postarg: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), expandarray_postarg)")],
1426       expandarray_not_array: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), expandarray_not_array)")],
1427       expandarray_rhs_too_small: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), expandarray_rhs_too_small)")],
1428       getblockpp_block_param_modified: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), getblockpp_block_param_modified)")],
1429       getblockpp_block_handler_none: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), getblockpp_block_handler_none)")],
1430       getblockpp_not_gc_guarded: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), getblockpp_not_gc_guarded)")],
1431       getblockpp_not_iseq_block: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), getblockpp_not_iseq_block)")],
1432       compiled_block_count: [CType::Immediate.parse("size_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_rjit_runtime_counters *)NULL)), compiled_block_count)")],
1433     )
1434   end
1436   def C.rb_serial_t
1437     @rb_serial_t ||= CType::Immediate.parse("unsigned long long")
1438   end
1440   def C.rb_shape
1441     @rb_shape ||= CType::Struct.new(
1442       "rb_shape", Primitive.cexpr!("SIZEOF(struct rb_shape)"),
1443       edges: [CType::Pointer.new { self.rb_id_table }, Primitive.cexpr!("OFFSETOF((*((struct rb_shape *)NULL)), edges)")],
1444       edge_name: [self.ID, Primitive.cexpr!("OFFSETOF((*((struct rb_shape *)NULL)), edge_name)")],
1445       next_iv_index: [self.attr_index_t, Primitive.cexpr!("OFFSETOF((*((struct rb_shape *)NULL)), next_iv_index)")],
1446       capacity: [CType::Immediate.parse("uint32_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_shape *)NULL)), capacity)")],
1447       type: [CType::Immediate.parse("uint8_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_shape *)NULL)), type)")],
1448       size_pool_index: [CType::Immediate.parse("uint8_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_shape *)NULL)), size_pool_index)")],
1449       parent_id: [self.shape_id_t, Primitive.cexpr!("OFFSETOF((*((struct rb_shape *)NULL)), parent_id)")],
1450       ancestor_index: [CType::Pointer.new { self.redblack_node_t }, Primitive.cexpr!("OFFSETOF((*((struct rb_shape *)NULL)), ancestor_index)")],
1451     )
1452   end
1454   def C.rb_shape_t
1455     @rb_shape_t ||= self.rb_shape
1456   end
1458   def C.rb_thread_struct
1459     @rb_thread_struct ||= CType::Struct.new(
1460       "rb_thread_struct", Primitive.cexpr!("SIZEOF(struct rb_thread_struct)"),
1461       lt_node: [self.ccan_list_node, Primitive.cexpr!("OFFSETOF((*((struct rb_thread_struct *)NULL)), lt_node)")],
1462       self: [self.VALUE, Primitive.cexpr!("OFFSETOF((*((struct rb_thread_struct *)NULL)), self)")],
1463       ractor: [CType::Pointer.new { self.rb_ractor_t }, Primitive.cexpr!("OFFSETOF((*((struct rb_thread_struct *)NULL)), ractor)")],
1464       vm: [CType::Pointer.new { self.rb_vm_t }, Primitive.cexpr!("OFFSETOF((*((struct rb_thread_struct *)NULL)), vm)")],
1465       nt: [CType::Pointer.new { self.rb_native_thread }, Primitive.cexpr!("OFFSETOF((*((struct rb_thread_struct *)NULL)), nt)")],
1466       ec: [CType::Pointer.new { self.rb_execution_context_t }, Primitive.cexpr!("OFFSETOF((*((struct rb_thread_struct *)NULL)), ec)")],
1467       sched: [self.rb_thread_sched_item, Primitive.cexpr!("OFFSETOF((*((struct rb_thread_struct *)NULL)), sched)")],
1468       mn_schedulable: [self._Bool, Primitive.cexpr!("OFFSETOF((*((struct rb_thread_struct *)NULL)), mn_schedulable)")],
1469       serial: [self.rb_atomic_t, Primitive.cexpr!("OFFSETOF((*((struct rb_thread_struct *)NULL)), serial)")],
1470       last_status: [self.VALUE, Primitive.cexpr!("OFFSETOF((*((struct rb_thread_struct *)NULL)), last_status)")],
1471       calling: [CType::Pointer.new { self.rb_calling_info }, Primitive.cexpr!("OFFSETOF((*((struct rb_thread_struct *)NULL)), calling)")],
1472       top_self: [self.VALUE, Primitive.cexpr!("OFFSETOF((*((struct rb_thread_struct *)NULL)), top_self)")],
1473       top_wrapper: [self.VALUE, Primitive.cexpr!("OFFSETOF((*((struct rb_thread_struct *)NULL)), top_wrapper)")],
1474       priority: [CType::Immediate.parse("int8_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_thread_struct *)NULL)), priority)")],
1475       running_time_us: [CType::Immediate.parse("uint32_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_thread_struct *)NULL)), running_time_us)")],
1476       blocking_region_buffer: [CType::Pointer.new { CType::Immediate.parse("void") }, Primitive.cexpr!("OFFSETOF((*((struct rb_thread_struct *)NULL)), blocking_region_buffer)")],
1477       thgroup: [self.VALUE, Primitive.cexpr!("OFFSETOF((*((struct rb_thread_struct *)NULL)), thgroup)")],
1478       value: [self.VALUE, Primitive.cexpr!("OFFSETOF((*((struct rb_thread_struct *)NULL)), value)")],
1479       pending_interrupt_queue: [self.VALUE, Primitive.cexpr!("OFFSETOF((*((struct rb_thread_struct *)NULL)), pending_interrupt_queue)")],
1480       pending_interrupt_mask_stack: [self.VALUE, Primitive.cexpr!("OFFSETOF((*((struct rb_thread_struct *)NULL)), pending_interrupt_mask_stack)")],
1481       interrupt_lock: [self.rb_nativethread_lock_t, Primitive.cexpr!("OFFSETOF((*((struct rb_thread_struct *)NULL)), interrupt_lock)")],
1482       unblock: [self.rb_unblock_callback, Primitive.cexpr!("OFFSETOF((*((struct rb_thread_struct *)NULL)), unblock)")],
1483       locking_mutex: [self.VALUE, Primitive.cexpr!("OFFSETOF((*((struct rb_thread_struct *)NULL)), locking_mutex)")],
1484       keeping_mutexes: [CType::Pointer.new { self.rb_mutex_struct }, Primitive.cexpr!("OFFSETOF((*((struct rb_thread_struct *)NULL)), keeping_mutexes)")],
1485       join_list: [CType::Pointer.new { self.rb_waiting_list }, Primitive.cexpr!("OFFSETOF((*((struct rb_thread_struct *)NULL)), join_list)")],
1486       invoke_arg: [CType::Union.new(
1487         "", Primitive.cexpr!("SIZEOF(((struct rb_thread_struct *)NULL)->invoke_arg)"),
1488         proc: CType::Struct.new(
1489           "", Primitive.cexpr!("SIZEOF(((struct rb_thread_struct *)NULL)->invoke_arg.proc)"),
1490           proc: [self.VALUE, Primitive.cexpr!("OFFSETOF(((struct rb_thread_struct *)NULL)->invoke_arg.proc, proc)")],
1491           args: [self.VALUE, Primitive.cexpr!("OFFSETOF(((struct rb_thread_struct *)NULL)->invoke_arg.proc, args)")],
1492           kw_splat: [CType::Immediate.parse("int"), Primitive.cexpr!("OFFSETOF(((struct rb_thread_struct *)NULL)->invoke_arg.proc, kw_splat)")],
1493         ),
1494         func: CType::Struct.new(
1495           "", Primitive.cexpr!("SIZEOF(((struct rb_thread_struct *)NULL)->invoke_arg.func)"),
1496           func: [CType::Immediate.parse("void *"), Primitive.cexpr!("OFFSETOF(((struct rb_thread_struct *)NULL)->invoke_arg.func, func)")],
1497           arg: [CType::Pointer.new { CType::Immediate.parse("void") }, Primitive.cexpr!("OFFSETOF(((struct rb_thread_struct *)NULL)->invoke_arg.func, arg)")],
1498         ),
1499       ), Primitive.cexpr!("OFFSETOF((*((struct rb_thread_struct *)NULL)), invoke_arg)")],
1500       invoke_type: [self.thread_invoke_type, Primitive.cexpr!("OFFSETOF((*((struct rb_thread_struct *)NULL)), invoke_type)")],
1501       stat_insn_usage: [self.VALUE, Primitive.cexpr!("OFFSETOF((*((struct rb_thread_struct *)NULL)), stat_insn_usage)")],
1502       root_fiber: [CType::Pointer.new { self.rb_fiber_t }, Primitive.cexpr!("OFFSETOF((*((struct rb_thread_struct *)NULL)), root_fiber)")],
1503       scheduler: [self.VALUE, Primitive.cexpr!("OFFSETOF((*((struct rb_thread_struct *)NULL)), scheduler)")],
1504       blocking: [CType::Immediate.parse("unsigned int"), Primitive.cexpr!("OFFSETOF((*((struct rb_thread_struct *)NULL)), blocking)")],
1505       name: [self.VALUE, Primitive.cexpr!("OFFSETOF((*((struct rb_thread_struct *)NULL)), name)")],
1506       specific_storage: [CType::Pointer.new { CType::Pointer.new { CType::Immediate.parse("void") } }, Primitive.cexpr!("OFFSETOF((*((struct rb_thread_struct *)NULL)), specific_storage)")],
1507       ext_config: [self.rb_ext_config, Primitive.cexpr!("OFFSETOF((*((struct rb_thread_struct *)NULL)), ext_config)")],
1508     )
1509   end
1511   def C.VALUE
1512     @VALUE ||= CType::Immediate.find(
1513       Primitive.cexpr!("SIZEOF(VALUE)"),
1514       Primitive.cexpr!("SIGNED_TYPE_P(VALUE)"),
1515     )
1516   end
1518   def C.shape_id_t
1519     @shape_id_t ||= CType::Immediate.find(
1520       Primitive.cexpr!("SIZEOF(shape_id_t)"),
1521       Primitive.cexpr!("SIGNED_TYPE_P(shape_id_t)"),
1522     )
1523   end
1525   def C.rb_id_table
1526     CType::Stub.new(:rb_id_table)
1527   end
1529   def C.vm_call_handler
1530     CType::Stub.new(:vm_call_handler)
1531   end
1533   def C.method_missing_reason
1534     CType::Stub.new(:method_missing_reason)
1535   end
1537   def C.vm_ifunc
1538     CType::Stub.new(:vm_ifunc)
1539   end
1541   def C.rb_cref_struct
1542     CType::Stub.new(:rb_cref_struct)
1543   end
1545   def C.rb_scope_visibility_t
1546     CType::Stub.new(:rb_scope_visibility_t)
1547   end
1549   def C.rb_vm_tag
1550     CType::Stub.new(:rb_vm_tag)
1551   end
1553   def C.rb_atomic_t
1554     CType::Stub.new(:rb_atomic_t)
1555   end
1557   def C.rb_fiber_t
1558     CType::Stub.new(:rb_fiber_t)
1559   end
1561   def C.rb_ensure_list_t
1562     CType::Stub.new(:rb_ensure_list_t)
1563   end
1565   def C.rb_trace_arg_struct
1566     CType::Stub.new(:rb_trace_arg_struct)
1567   end
1569   def C.rb_iseq_type
1570     CType::Stub.new(:rb_iseq_type)
1571   end
1573   def C.iseq_insn_info
1574     CType::Stub.new(:iseq_insn_info)
1575   end
1577   def C.iseq_catch_table
1578     CType::Stub.new(:iseq_catch_table)
1579   end
1581   def C.rb_snum_t
1582     CType::Stub.new(:rb_snum_t)
1583   end
1585   def C._Bool
1586     CType::Bool.new
1587   end
1589   def C.iseq_bits_t
1590     CType::Stub.new(:iseq_bits_t)
1591   end
1593   def C.rb_code_location_t
1594     CType::Stub.new(:rb_code_location_t)
1595   end
1597   def C.iseq_compile_data
1598     CType::Stub.new(:iseq_compile_data)
1599   end
1601   def C.rb_hook_list_struct
1602     CType::Stub.new(:rb_hook_list_struct)
1603   end
1605   def C.rb_event_flag_t
1606     CType::Stub.new(:rb_event_flag_t)
1607   end
1609   def C.rb_method_alias_t
1610     CType::Stub.new(:rb_method_alias_t)
1611   end
1613   def C.rb_method_refined_t
1614     CType::Stub.new(:rb_method_refined_t)
1615   end
1617   def C.redblack_node_t
1618     CType::Stub.new(:redblack_node_t)
1619   end
1621   def C.ccan_list_node
1622     CType::Stub.new(:ccan_list_node)
1623   end
1625   def C.rb_ractor_t
1626     CType::Stub.new(:rb_ractor_t)
1627   end
1629   def C.rb_vm_t
1630     CType::Stub.new(:rb_vm_t)
1631   end
1633   def C.rb_native_thread
1634     CType::Stub.new(:rb_native_thread)
1635   end
1637   def C.rb_thread_sched_item
1638     CType::Stub.new(:rb_thread_sched_item)
1639   end
1641   def C.rb_calling_info
1642     CType::Stub.new(:rb_calling_info)
1643   end
1645   def C.rb_nativethread_lock_t
1646     CType::Stub.new(:rb_nativethread_lock_t)
1647   end
1649   def C.rb_unblock_callback
1650     CType::Stub.new(:rb_unblock_callback)
1651   end
1653   def C.rb_mutex_struct
1654     CType::Stub.new(:rb_mutex_struct)
1655   end
1657   def C.rb_waiting_list
1658     CType::Stub.new(:rb_waiting_list)
1659   end
1661   def C.thread_invoke_type
1662     CType::Stub.new(:thread_invoke_type)
1663   end
1665   def C.rb_ext_config
1666     CType::Stub.new(:rb_ext_config)
1667   end
1669   ### RJIT bindgen end ###
1670 end if Primitive.rjit_enabled_p