зеркало из https://github.com/github/ruby.git
RJIT: Migrate SIZET values to RJIT::C constants
This commit is contained in:
Родитель
50c5f94ed7
Коммит
fe34db5a1b
|
@ -179,7 +179,7 @@ module RubyVM::RJIT
|
|||
# Bail when VM_ENV_FLAGS(ep, VM_FRAME_FLAG_MODIFIED_BLOCK_PARAM) is non zero
|
||||
# FIXME: This is testing bits in the same place that the WB check is testing.
|
||||
# We should combine these at some point
|
||||
asm.test([ep_reg, C.VALUE.size * C.VM_ENV_DATA_INDEX_FLAGS], C.VM_FRAME_FLAG_MODIFIED_BLOCK_PARAM)
|
||||
asm.test([ep_reg, C.VALUE.size * C::VM_ENV_DATA_INDEX_FLAGS], C::VM_FRAME_FLAG_MODIFIED_BLOCK_PARAM)
|
||||
|
||||
# If the frame flag has been modified, then the actual proc value is
|
||||
# already in the EP and we should just use the value.
|
||||
|
@ -190,7 +190,7 @@ module RubyVM::RJIT
|
|||
# fire a write barrier for the write, then exit (we'll let the
|
||||
# interpreter handle it so it can fire the write barrier).
|
||||
# flags & VM_ENV_FLAG_WB_REQUIRED
|
||||
asm.test([ep_reg, C.VALUE.size * C.VM_ENV_DATA_INDEX_FLAGS], C.VM_ENV_FLAG_WB_REQUIRED)
|
||||
asm.test([ep_reg, C.VALUE.size * C::VM_ENV_DATA_INDEX_FLAGS], C::VM_ENV_FLAG_WB_REQUIRED)
|
||||
|
||||
# if (flags & VM_ENV_FLAG_WB_REQUIRED) != 0
|
||||
asm.jnz(side_exit)
|
||||
|
@ -213,9 +213,9 @@ module RubyVM::RJIT
|
|||
asm.mov([ep_reg, offs], C_RET);
|
||||
|
||||
# Set the frame modified flag
|
||||
asm.mov(:rax, [ep_reg, C.VALUE.size * C.VM_ENV_DATA_INDEX_FLAGS]) # flag_check
|
||||
asm.or(:rax, C.VM_FRAME_FLAG_MODIFIED_BLOCK_PARAM) # modified_flag
|
||||
asm.mov([ep_reg, C.VALUE.size * C.VM_ENV_DATA_INDEX_FLAGS], :rax)
|
||||
asm.mov(:rax, [ep_reg, C.VALUE.size * C::VM_ENV_DATA_INDEX_FLAGS]) # flag_check
|
||||
asm.or(:rax, C::VM_FRAME_FLAG_MODIFIED_BLOCK_PARAM) # modified_flag
|
||||
asm.mov([ep_reg, C.VALUE.size * C::VM_ENV_DATA_INDEX_FLAGS], :rax)
|
||||
|
||||
asm.write_label(frame_flag_modified)
|
||||
|
||||
|
@ -265,7 +265,7 @@ module RubyVM::RJIT
|
|||
jit_get_ep(asm, level, reg: ep_reg)
|
||||
|
||||
# Bail when VM_ENV_FLAGS(ep, VM_FRAME_FLAG_MODIFIED_BLOCK_PARAM) is non zero
|
||||
asm.test([ep_reg, C.VALUE.size * C.VM_ENV_DATA_INDEX_FLAGS], C.VM_FRAME_FLAG_MODIFIED_BLOCK_PARAM)
|
||||
asm.test([ep_reg, C.VALUE.size * C::VM_ENV_DATA_INDEX_FLAGS], C::VM_FRAME_FLAG_MODIFIED_BLOCK_PARAM)
|
||||
asm.jnz(counted_exit(side_exit, :getblockpp_block_param_modified))
|
||||
|
||||
# Load the block handler for the current frame
|
||||
|
@ -343,7 +343,7 @@ module RubyVM::RJIT
|
|||
end
|
||||
|
||||
# Check if the comptime receiver is a T_OBJECT
|
||||
receiver_t_object = C.BUILTIN_TYPE(comptime_receiver) == C.T_OBJECT
|
||||
receiver_t_object = C::BUILTIN_TYPE(comptime_receiver) == C::T_OBJECT
|
||||
|
||||
# If the receiver isn't a T_OBJECT, or uses a custom allocator,
|
||||
# then just write out the IV write as a function call.
|
||||
|
@ -418,7 +418,7 @@ module RubyVM::RJIT
|
|||
end
|
||||
new_shape_id = C.rb_shape_id(dest_shape)
|
||||
|
||||
if new_shape_id == C.OBJ_TOO_COMPLEX_SHAPE_ID
|
||||
if new_shape_id == C::OBJ_TOO_COMPLEX_SHAPE_ID
|
||||
asm.incr_counter(:setivar_too_complex)
|
||||
return CantCompile
|
||||
end
|
||||
|
@ -454,7 +454,7 @@ module RubyVM::RJIT
|
|||
|
||||
skip_wb = asm.new_label('skip_wb')
|
||||
# If the value we're writing is an immediate, we don't need to WB
|
||||
asm.test(write_val, C.RUBY_IMMEDIATE_MASK)
|
||||
asm.test(write_val, C::RUBY_IMMEDIATE_MASK)
|
||||
asm.jnz(skip_wb)
|
||||
|
||||
# If the value we're writing is nil or false, we don't need to WB
|
||||
|
@ -795,7 +795,7 @@ module RubyVM::RJIT
|
|||
# (struct RArray *)(obj)->as.heap.ptr
|
||||
#asm.mov(:rax, array_opnd)
|
||||
asm.mov(:rcx, [:rax, C.RBasic.offsetof(:flags)])
|
||||
asm.test(:rcx, C.RARRAY_EMBED_FLAG);
|
||||
asm.test(:rcx, C::RARRAY_EMBED_FLAG);
|
||||
asm.mov(:rcx, [:rax, C.RArray.offsetof(:as, :heap, :ptr)])
|
||||
|
||||
# Load the address of the embedded array into REG1.
|
||||
|
@ -1097,7 +1097,7 @@ module RubyVM::RJIT
|
|||
if cme == CantCompile
|
||||
return CantCompile
|
||||
end
|
||||
jit_call_general(jit, ctx, asm, mid, argc, flags, cme, C.VM_BLOCK_HANDLER_NONE, comptime_recv_klass)
|
||||
jit_call_general(jit, ctx, asm, mid, argc, flags, cme, C::VM_BLOCK_HANDLER_NONE, comptime_recv_klass)
|
||||
end
|
||||
|
||||
# @param jit [RubyVM::RJIT::JITState]
|
||||
|
@ -1112,7 +1112,7 @@ module RubyVM::RJIT
|
|||
recv = ctx.stack_opnd(0)
|
||||
comptime_recv = jit.peek_at_stack(0)
|
||||
|
||||
if C.RB_TYPE_P(comptime_recv, C.RUBY_T_STRING)
|
||||
if C::RB_TYPE_P(comptime_recv, C::RUBY_T_STRING)
|
||||
side_exit = side_exit(jit, ctx)
|
||||
|
||||
jit_guard_known_klass(jit, ctx, asm, C.rb_class_of(comptime_recv), recv, comptime_recv, side_exit)
|
||||
|
@ -1128,7 +1128,7 @@ module RubyVM::RJIT
|
|||
# @param ctx [RubyVM::RJIT::Context]
|
||||
# @param asm [RubyVM::RJIT::Assembler]
|
||||
def opt_str_freeze(jit, ctx, asm)
|
||||
unless Invariants.assume_bop_not_redefined(jit, C.STRING_REDEFINED_OP_FLAG, C.BOP_FREEZE)
|
||||
unless Invariants.assume_bop_not_redefined(jit, C::STRING_REDEFINED_OP_FLAG, C::BOP_FREEZE)
|
||||
return CantCompile;
|
||||
end
|
||||
|
||||
|
@ -1436,7 +1436,7 @@ module RubyVM::RJIT
|
|||
# Generate a side exit before popping operands
|
||||
side_exit = side_exit(jit, ctx)
|
||||
|
||||
unless Invariants.assume_bop_not_redefined(jit, C.INTEGER_REDEFINED_OP_FLAG, C.BOP_PLUS)
|
||||
unless Invariants.assume_bop_not_redefined(jit, C::INTEGER_REDEFINED_OP_FLAG, C::BOP_PLUS)
|
||||
return CantCompile
|
||||
end
|
||||
|
||||
|
@ -1444,11 +1444,11 @@ module RubyVM::RJIT
|
|||
recv_opnd = ctx.stack_pop
|
||||
|
||||
asm.comment('guard recv is fixnum') # TODO: skip this with type information
|
||||
asm.test(recv_opnd, C.RUBY_FIXNUM_FLAG)
|
||||
asm.test(recv_opnd, C::RUBY_FIXNUM_FLAG)
|
||||
asm.jz(side_exit)
|
||||
|
||||
asm.comment('guard obj is fixnum') # TODO: skip this with type information
|
||||
asm.test(obj_opnd, C.RUBY_FIXNUM_FLAG)
|
||||
asm.test(obj_opnd, C::RUBY_FIXNUM_FLAG)
|
||||
asm.jz(side_exit)
|
||||
|
||||
asm.mov(:rax, recv_opnd)
|
||||
|
@ -1482,7 +1482,7 @@ module RubyVM::RJIT
|
|||
# Generate a side exit before popping operands
|
||||
side_exit = side_exit(jit, ctx)
|
||||
|
||||
unless Invariants.assume_bop_not_redefined(jit, C.INTEGER_REDEFINED_OP_FLAG, C.BOP_MINUS)
|
||||
unless Invariants.assume_bop_not_redefined(jit, C::INTEGER_REDEFINED_OP_FLAG, C::BOP_MINUS)
|
||||
return CantCompile
|
||||
end
|
||||
|
||||
|
@ -1490,11 +1490,11 @@ module RubyVM::RJIT
|
|||
recv_opnd = ctx.stack_pop
|
||||
|
||||
asm.comment('guard recv is fixnum') # TODO: skip this with type information
|
||||
asm.test(recv_opnd, C.RUBY_FIXNUM_FLAG)
|
||||
asm.test(recv_opnd, C::RUBY_FIXNUM_FLAG)
|
||||
asm.jz(side_exit)
|
||||
|
||||
asm.comment('guard obj is fixnum') # TODO: skip this with type information
|
||||
asm.test(obj_opnd, C.RUBY_FIXNUM_FLAG)
|
||||
asm.test(obj_opnd, C::RUBY_FIXNUM_FLAG)
|
||||
asm.jz(side_exit)
|
||||
|
||||
asm.mov(:rax, recv_opnd)
|
||||
|
@ -1540,7 +1540,7 @@ module RubyVM::RJIT
|
|||
# Note: we generate the side-exit before popping operands from the stack
|
||||
side_exit = side_exit(jit, ctx)
|
||||
|
||||
unless Invariants.assume_bop_not_redefined(jit, C.INTEGER_REDEFINED_OP_FLAG, C.BOP_MOD)
|
||||
unless Invariants.assume_bop_not_redefined(jit, C::INTEGER_REDEFINED_OP_FLAG, C::BOP_MOD)
|
||||
return CantCompile
|
||||
end
|
||||
|
||||
|
@ -1601,28 +1601,28 @@ module RubyVM::RJIT
|
|||
# @param ctx [RubyVM::RJIT::Context]
|
||||
# @param asm [RubyVM::RJIT::Assembler]
|
||||
def opt_lt(jit, ctx, asm)
|
||||
jit_fixnum_cmp(jit, ctx, asm, opcode: :cmovl, bop: C.BOP_LT)
|
||||
jit_fixnum_cmp(jit, ctx, asm, opcode: :cmovl, bop: C::BOP_LT)
|
||||
end
|
||||
|
||||
# @param jit [RubyVM::RJIT::JITState]
|
||||
# @param ctx [RubyVM::RJIT::Context]
|
||||
# @param asm [RubyVM::RJIT::Assembler]
|
||||
def opt_le(jit, ctx, asm)
|
||||
jit_fixnum_cmp(jit, ctx, asm, opcode: :cmovle, bop: C.BOP_LE)
|
||||
jit_fixnum_cmp(jit, ctx, asm, opcode: :cmovle, bop: C::BOP_LE)
|
||||
end
|
||||
|
||||
# @param jit [RubyVM::RJIT::JITState]
|
||||
# @param ctx [RubyVM::RJIT::Context]
|
||||
# @param asm [RubyVM::RJIT::Assembler]
|
||||
def opt_gt(jit, ctx, asm)
|
||||
jit_fixnum_cmp(jit, ctx, asm, opcode: :cmovg, bop: C.BOP_GT)
|
||||
jit_fixnum_cmp(jit, ctx, asm, opcode: :cmovg, bop: C::BOP_GT)
|
||||
end
|
||||
|
||||
# @param jit [RubyVM::RJIT::JITState]
|
||||
# @param ctx [RubyVM::RJIT::Context]
|
||||
# @param asm [RubyVM::RJIT::Assembler]
|
||||
def opt_ge(jit, ctx, asm)
|
||||
jit_fixnum_cmp(jit, ctx, asm, opcode: :cmovge, bop: C.BOP_GE)
|
||||
jit_fixnum_cmp(jit, ctx, asm, opcode: :cmovge, bop: C::BOP_GE)
|
||||
end
|
||||
|
||||
# @param jit [RubyVM::RJIT::JITState]
|
||||
|
@ -1646,7 +1646,7 @@ module RubyVM::RJIT
|
|||
# Note: we generate the side-exit before popping operands from the stack
|
||||
side_exit = side_exit(jit, ctx)
|
||||
|
||||
unless Invariants.assume_bop_not_redefined(jit, C.INTEGER_REDEFINED_OP_FLAG, C.BOP_AND)
|
||||
unless Invariants.assume_bop_not_redefined(jit, C::INTEGER_REDEFINED_OP_FLAG, C::BOP_AND)
|
||||
return CantCompile
|
||||
end
|
||||
|
||||
|
@ -1685,7 +1685,7 @@ module RubyVM::RJIT
|
|||
# Note: we generate the side-exit before popping operands from the stack
|
||||
side_exit = side_exit(jit, ctx)
|
||||
|
||||
unless Invariants.assume_bop_not_redefined(jit, C.INTEGER_REDEFINED_OP_FLAG, C.BOP_OR)
|
||||
unless Invariants.assume_bop_not_redefined(jit, C::INTEGER_REDEFINED_OP_FLAG, C::BOP_OR)
|
||||
return CantCompile
|
||||
end
|
||||
|
||||
|
@ -1734,7 +1734,7 @@ module RubyVM::RJIT
|
|||
side_exit = side_exit(jit, ctx)
|
||||
|
||||
if C.rb_class_of(comptime_recv) == Array && fixnum?(comptime_obj)
|
||||
unless Invariants.assume_bop_not_redefined(jit, C.ARRAY_REDEFINED_OP_FLAG, C.BOP_AREF)
|
||||
unless Invariants.assume_bop_not_redefined(jit, C::ARRAY_REDEFINED_OP_FLAG, C::BOP_AREF)
|
||||
return CantCompile
|
||||
end
|
||||
|
||||
|
@ -1746,7 +1746,7 @@ module RubyVM::RJIT
|
|||
|
||||
# Bail if idx is not a FIXNUM
|
||||
asm.mov(:rax, idx_opnd)
|
||||
asm.test(:rax, C.RUBY_FIXNUM_FLAG)
|
||||
asm.test(:rax, C::RUBY_FIXNUM_FLAG)
|
||||
asm.jz(counted_exit(side_exit, :optaref_arg_not_fixnum))
|
||||
|
||||
# Call VALUE rb_ary_entry_internal(VALUE ary, long offset).
|
||||
|
@ -1767,7 +1767,7 @@ module RubyVM::RJIT
|
|||
jump_to_next_insn(jit, ctx, asm)
|
||||
EndBlock
|
||||
elsif C.rb_class_of(comptime_recv) == Hash
|
||||
unless Invariants.assume_bop_not_redefined(jit, C.HASH_REDEFINED_OP_FLAG, C.BOP_AREF)
|
||||
unless Invariants.assume_bop_not_redefined(jit, C::HASH_REDEFINED_OP_FLAG, C::BOP_AREF)
|
||||
return CantCompile
|
||||
end
|
||||
|
||||
|
@ -1956,7 +1956,7 @@ module RubyVM::RJIT
|
|||
|
||||
bf_argc.times do |i|
|
||||
table_size = jit.iseq.body.local_table_size
|
||||
offs = -table_size - C.VM_ENV_DATA_SIZE + 1 + start_index + i
|
||||
offs = -table_size - C::VM_ENV_DATA_SIZE + 1 + start_index + i
|
||||
asm.mov(C_ARGS[2 + i], [:rax, offs * C.VALUE.size])
|
||||
end
|
||||
end
|
||||
|
@ -2019,8 +2019,8 @@ module RubyVM::RJIT
|
|||
# can skip this check.
|
||||
|
||||
# flags & VM_ENV_FLAG_WB_REQUIRED
|
||||
flags_opnd = [ep_reg, C.VALUE.size * C.VM_ENV_DATA_INDEX_FLAGS]
|
||||
asm.test(flags_opnd, C.VM_ENV_FLAG_WB_REQUIRED)
|
||||
flags_opnd = [ep_reg, C.VALUE.size * C::VM_ENV_DATA_INDEX_FLAGS]
|
||||
asm.test(flags_opnd, C::VM_ENV_FLAG_WB_REQUIRED)
|
||||
|
||||
# Create a side-exit to fall back to the interpreter
|
||||
side_exit = side_exit(jit, ctx)
|
||||
|
@ -2417,8 +2417,8 @@ module RubyVM::RJIT
|
|||
# can skip this check.
|
||||
|
||||
# flags & VM_ENV_FLAG_WB_REQUIRED
|
||||
flags_opnd = [ep_reg, C.VALUE.size * C.VM_ENV_DATA_INDEX_FLAGS]
|
||||
asm.test(flags_opnd, C.VM_ENV_FLAG_WB_REQUIRED)
|
||||
flags_opnd = [ep_reg, C.VALUE.size * C::VM_ENV_DATA_INDEX_FLAGS]
|
||||
asm.test(flags_opnd, C::VM_ENV_FLAG_WB_REQUIRED)
|
||||
|
||||
# Create a side-exit to fall back to the interpreter
|
||||
side_exit = side_exit(jit, ctx)
|
||||
|
@ -2453,7 +2453,7 @@ module RubyVM::RJIT
|
|||
# See usages of local_var_name() from iseq.c for similar calculation.
|
||||
|
||||
local_table_size = iseq.body.local_table_size
|
||||
op = slot_idx - C.VM_ENV_DATA_SIZE
|
||||
op = slot_idx - C::VM_ENV_DATA_SIZE
|
||||
local_table_size - op - 1
|
||||
end
|
||||
|
||||
|
@ -2461,7 +2461,7 @@ module RubyVM::RJIT
|
|||
def guard_object_is_heap(asm, object_opnd, side_exit)
|
||||
asm.comment('guard object is heap')
|
||||
# Test that the object is not an immediate
|
||||
asm.test(object_opnd, C.RUBY_IMMEDIATE_MASK)
|
||||
asm.test(object_opnd, C::RUBY_IMMEDIATE_MASK)
|
||||
asm.jnz(side_exit)
|
||||
|
||||
# Test that the object is not false
|
||||
|
@ -2474,10 +2474,10 @@ module RubyVM::RJIT
|
|||
asm.comment('guard object is array')
|
||||
# Pull out the type mask
|
||||
asm.mov(flags_reg, [object_reg, C.RBasic.offsetof(:flags)])
|
||||
asm.and(flags_reg, C.RUBY_T_MASK)
|
||||
asm.and(flags_reg, C::RUBY_T_MASK)
|
||||
|
||||
# Compare the result with T_ARRAY
|
||||
asm.cmp(flags_reg, C.RUBY_T_ARRAY)
|
||||
asm.cmp(flags_reg, C::RUBY_T_ARRAY)
|
||||
asm.jne(side_exit)
|
||||
end
|
||||
|
||||
|
@ -2536,23 +2536,23 @@ module RubyVM::RJIT
|
|||
jit_chain_guard(:jne, jit, ctx, asm, side_exit, limit:)
|
||||
elsif known_klass == Integer && fixnum?(comptime_obj)
|
||||
asm.comment('guard object is fixnum')
|
||||
asm.test(obj_opnd, C.RUBY_FIXNUM_FLAG)
|
||||
asm.test(obj_opnd, C::RUBY_FIXNUM_FLAG)
|
||||
jit_chain_guard(:jz, jit, ctx, asm, side_exit, limit:)
|
||||
elsif known_klass == Symbol && static_symbol?(comptime_obj)
|
||||
# We will guard STATIC vs DYNAMIC as though they were separate classes
|
||||
# DYNAMIC symbols can be handled by the general else case below
|
||||
asm.comment('guard object is static symbol')
|
||||
assert_equal(8, C.RUBY_SPECIAL_SHIFT)
|
||||
asm.cmp(BytePtr[*obj_opnd], C.RUBY_SYMBOL_FLAG)
|
||||
assert_equal(8, C::RUBY_SPECIAL_SHIFT)
|
||||
asm.cmp(BytePtr[*obj_opnd], C::RUBY_SYMBOL_FLAG)
|
||||
jit_chain_guard(:jne, jit, ctx, asm, side_exit, limit:)
|
||||
elsif known_klass == Float && flonum?(comptime_obj)
|
||||
# We will guard flonum vs heap float as though they were separate classes
|
||||
asm.comment('guard object is flonum')
|
||||
asm.mov(:rax, obj_opnd)
|
||||
asm.and(:rax, C.RUBY_FLONUM_MASK)
|
||||
asm.cmp(:rax, C.RUBY_FLONUM_FLAG)
|
||||
asm.and(:rax, C::RUBY_FLONUM_MASK)
|
||||
asm.cmp(:rax, C::RUBY_FLONUM_FLAG)
|
||||
jit_chain_guard(:jne, jit, ctx, asm, side_exit, limit:)
|
||||
elsif C.FL_TEST(known_klass, C.RUBY_FL_SINGLETON) && comptime_obj == C.rb_class_attached_object(known_klass)
|
||||
elsif C::FL_TEST(known_klass, C::RUBY_FL_SINGLETON) && comptime_obj == C.rb_class_attached_object(known_klass)
|
||||
asm.comment('guard known object with singleton class')
|
||||
asm.mov(:rax, C.to_value(comptime_obj))
|
||||
asm.cmp(obj_opnd, :rax)
|
||||
|
@ -2565,7 +2565,7 @@ module RubyVM::RJIT
|
|||
# Check that the receiver is a heap object
|
||||
# Note: if we get here, the class doesn't have immediate instances.
|
||||
asm.comment('guard not immediate')
|
||||
asm.test(obj_opnd, C.RUBY_IMMEDIATE_MASK)
|
||||
asm.test(obj_opnd, C::RUBY_IMMEDIATE_MASK)
|
||||
jit_chain_guard(:jnz, jit, ctx, asm, side_exit, limit:)
|
||||
asm.cmp(obj_opnd, Qfalse)
|
||||
jit_chain_guard(:je, jit, ctx, asm, side_exit, limit:)
|
||||
|
@ -2595,12 +2595,12 @@ module RubyVM::RJIT
|
|||
arg0 = ctx.stack_opnd(1)
|
||||
|
||||
asm.comment('guard arg0 fixnum')
|
||||
asm.test(arg0, C.RUBY_FIXNUM_FLAG)
|
||||
asm.test(arg0, C::RUBY_FIXNUM_FLAG)
|
||||
jit_chain_guard(:jz, jit, ctx, asm, side_exit)
|
||||
# TODO: upgrade type, and skip the check when possible
|
||||
|
||||
asm.comment('guard arg1 fixnum')
|
||||
asm.test(arg1, C.RUBY_FIXNUM_FLAG)
|
||||
asm.test(arg1, C::RUBY_FIXNUM_FLAG)
|
||||
jit_chain_guard(:jz, jit, ctx, asm, side_exit)
|
||||
# TODO: upgrade type, and skip the check when possible
|
||||
end
|
||||
|
@ -2623,7 +2623,7 @@ module RubyVM::RJIT
|
|||
# Generate a side exit before popping operands
|
||||
side_exit = side_exit(jit, ctx)
|
||||
|
||||
unless Invariants.assume_bop_not_redefined(jit, C.INTEGER_REDEFINED_OP_FLAG, bop)
|
||||
unless Invariants.assume_bop_not_redefined(jit, C::INTEGER_REDEFINED_OP_FLAG, bop)
|
||||
return CantCompile
|
||||
end
|
||||
|
||||
|
@ -2631,11 +2631,11 @@ module RubyVM::RJIT
|
|||
recv_opnd = ctx.stack_pop
|
||||
|
||||
asm.comment('guard recv is fixnum') # TODO: skip this with type information
|
||||
asm.test(recv_opnd, C.RUBY_FIXNUM_FLAG)
|
||||
asm.test(recv_opnd, C::RUBY_FIXNUM_FLAG)
|
||||
asm.jz(side_exit)
|
||||
|
||||
asm.comment('guard obj is fixnum') # TODO: skip this with type information
|
||||
asm.test(obj_opnd, C.RUBY_FIXNUM_FLAG)
|
||||
asm.test(obj_opnd, C::RUBY_FIXNUM_FLAG)
|
||||
asm.jz(side_exit)
|
||||
|
||||
asm.mov(:rax, obj_opnd)
|
||||
|
@ -2667,7 +2667,7 @@ module RubyVM::RJIT
|
|||
comptime_b = jit.peek_at_stack(0)
|
||||
|
||||
if two_fixnums_on_stack?(jit)
|
||||
unless Invariants.assume_bop_not_redefined(jit, C.INTEGER_REDEFINED_OP_FLAG, C.BOP_EQ)
|
||||
unless Invariants.assume_bop_not_redefined(jit, C::INTEGER_REDEFINED_OP_FLAG, C::BOP_EQ)
|
||||
return false
|
||||
end
|
||||
|
||||
|
@ -2688,7 +2688,7 @@ module RubyVM::RJIT
|
|||
|
||||
true
|
||||
elsif C.rb_class_of(comptime_a) == String && C.rb_class_of(comptime_b) == String
|
||||
unless Invariants.assume_bop_not_redefined(jit, C.STRING_REDEFINED_OP_FLAG, C.BOP_EQ)
|
||||
unless Invariants.assume_bop_not_redefined(jit, C::STRING_REDEFINED_OP_FLAG, C::BOP_EQ)
|
||||
# if overridden, emit the generic version
|
||||
return false
|
||||
end
|
||||
|
@ -2835,13 +2835,13 @@ module RubyVM::RJIT
|
|||
starting_ctx = ctx.dup # copy for jit_chain_guard
|
||||
|
||||
# Guard not special const
|
||||
if C.SPECIAL_CONST_P(comptime_obj)
|
||||
if C::SPECIAL_CONST_P(comptime_obj)
|
||||
asm.incr_counter(:getivar_special_const)
|
||||
return CantCompile
|
||||
end
|
||||
|
||||
case C.BUILTIN_TYPE(comptime_obj)
|
||||
when C.T_OBJECT
|
||||
case C::BUILTIN_TYPE(comptime_obj)
|
||||
when C::T_OBJECT
|
||||
# This is the only supported case for now (ROBJECT_IVPTR)
|
||||
else
|
||||
# General case. Call rb_ivar_get().
|
||||
|
@ -2872,7 +2872,7 @@ module RubyVM::RJIT
|
|||
guard_object_is_heap(asm, :rax, counted_exit(side_exit, :getivar_not_heap))
|
||||
|
||||
shape_id = C.rb_shape_get_shape_id(comptime_obj)
|
||||
if shape_id == C.OBJ_TOO_COMPLEX_SHAPE_ID
|
||||
if shape_id == C::OBJ_TOO_COMPLEX_SHAPE_ID
|
||||
asm.incr_counter(:getivar_too_complex)
|
||||
return CantCompile
|
||||
end
|
||||
|
@ -2884,7 +2884,7 @@ module RubyVM::RJIT
|
|||
index = C.rb_shape_get_iv_index(shape_id, ivar_id)
|
||||
if index
|
||||
asm.comment('ROBJECT_IVPTR')
|
||||
if C.FL_TEST_RAW(comptime_obj, C.ROBJECT_EMBED)
|
||||
if C::FL_TEST_RAW(comptime_obj, C::ROBJECT_EMBED)
|
||||
# Access embedded array
|
||||
asm.mov(:rax, [:rax, C.RObject.offsetof(:as, :ary) + (index * C.VALUE.size)])
|
||||
else
|
||||
|
@ -2911,7 +2911,7 @@ module RubyVM::RJIT
|
|||
|
||||
def jit_write_iv(asm, comptime_receiver, recv_reg, temp_reg, ivar_index, set_value, needs_extension)
|
||||
# Compile time self is embedded and the ivar index lands within the object
|
||||
embed_test_result = C.FL_TEST_RAW(comptime_receiver, C.ROBJECT_EMBED) && !needs_extension
|
||||
embed_test_result = C::FL_TEST_RAW(comptime_receiver, C::ROBJECT_EMBED) && !needs_extension
|
||||
|
||||
if embed_test_result
|
||||
# Find the IV offset
|
||||
|
@ -2940,14 +2940,14 @@ module RubyVM::RJIT
|
|||
# @param asm [RubyVM::RJIT::Assembler]
|
||||
def jit_caller_setup_arg_block(jit, ctx, asm, ci, blockiseq, is_super)
|
||||
side_exit = side_exit(jit, ctx)
|
||||
if C.vm_ci_flag(ci) & C.VM_CALL_ARGS_BLOCKARG != 0
|
||||
if C.vm_ci_flag(ci) & C::VM_CALL_ARGS_BLOCKARG != 0
|
||||
# TODO: Skip cmp + jne using Context?
|
||||
block_code = jit.peek_at_stack(0)
|
||||
block_opnd = ctx.stack_opnd(0) # to be popped after eliminating side exit possibility
|
||||
if block_code.nil?
|
||||
asm.cmp(block_opnd, Qnil)
|
||||
jit_chain_guard(:jne, jit, ctx, asm, counted_exit(side_exit, :send_block_not_nil))
|
||||
return C.VM_BLOCK_HANDLER_NONE
|
||||
return C::VM_BLOCK_HANDLER_NONE
|
||||
elsif C.to_value(block_code) == C.rb_block_param_proxy
|
||||
asm.mov(:rax, C.rb_block_param_proxy)
|
||||
asm.cmp(block_opnd, :rax)
|
||||
|
@ -2965,9 +2965,9 @@ module RubyVM::RJIT
|
|||
# Guard no block passed. Only handle that case for now.
|
||||
asm.comment('guard no block given')
|
||||
jit_get_lep(jit, asm, reg: :rax)
|
||||
asm.cmp([:rax, C.VALUE.size * C::VM_ENV_DATA_INDEX_SPECVAL], C.VM_BLOCK_HANDLER_NONE)
|
||||
asm.cmp([:rax, C.VALUE.size * C::VM_ENV_DATA_INDEX_SPECVAL], C::VM_BLOCK_HANDLER_NONE)
|
||||
asm.jne(counted_exit(side_exit, :send_block_handler))
|
||||
return C.VM_BLOCK_HANDLER_NONE
|
||||
return C::VM_BLOCK_HANDLER_NONE
|
||||
else
|
||||
# Not implemented yet. Is this even necessary?
|
||||
asm.incr_counter(:send_block_setup)
|
||||
|
@ -2987,15 +2987,15 @@ module RubyVM::RJIT
|
|||
side_exit = side_exit(jit, ctx)
|
||||
|
||||
# kw_splat is not supported yet
|
||||
if flags & C.VM_CALL_KW_SPLAT != 0
|
||||
if flags & C::VM_CALL_KW_SPLAT != 0
|
||||
asm.incr_counter(:send_kw_splat)
|
||||
return CantCompile
|
||||
end
|
||||
|
||||
# Get a compile-time receiver and its class
|
||||
recv_idx = argc + (flags & C.VM_CALL_ARGS_BLOCKARG != 0 ? 1 : 0) # blockarg is not popped yet
|
||||
recv_idx = argc + (flags & C::VM_CALL_ARGS_BLOCKARG != 0 ? 1 : 0) # blockarg is not popped yet
|
||||
recv_idx += send_shift
|
||||
comptime_recv = jit.peek_at_stack(recv_idx + (flags & C.VM_CALL_ARGS_BLOCKARG != 0 ? 1 : 0)) # this offset is in ctx but not in SP
|
||||
comptime_recv = jit.peek_at_stack(recv_idx + (flags & C::VM_CALL_ARGS_BLOCKARG != 0 ? 1 : 0)) # this offset is in ctx but not in SP
|
||||
comptime_recv_klass = C.rb_class_of(comptime_recv)
|
||||
|
||||
# Guard the receiver class (part of vm_search_method_fastpath)
|
||||
|
@ -3037,8 +3037,8 @@ module RubyVM::RJIT
|
|||
|
||||
# vm_search_normal_superclass
|
||||
rbasic_klass = C.to_ruby(C.RBasic.new(C.to_value(current_defined_class)).klass)
|
||||
if C.BUILTIN_TYPE(current_defined_class) == C.RUBY_T_ICLASS && C.BUILTIN_TYPE(rbasic_klass) == C.RUBY_T_MODULE && \
|
||||
C.FL_TEST_RAW(rbasic_klass, C.RMODULE_IS_REFINEMENT) != 0
|
||||
if C::BUILTIN_TYPE(current_defined_class) == C::RUBY_T_ICLASS && C::BUILTIN_TYPE(rbasic_klass) == C::RUBY_T_MODULE && \
|
||||
C::FL_TEST_RAW(rbasic_klass, C::RMODULE_IS_REFINEMENT) != 0
|
||||
return CantCompile
|
||||
end
|
||||
comptime_superclass = C.rb_class_get_superclass(current_defined_class)
|
||||
|
@ -3046,11 +3046,11 @@ module RubyVM::RJIT
|
|||
# Don't JIT calls that aren't simple
|
||||
# Note, not using VM_CALL_ARGS_SIMPLE because sometimes we pass a block.
|
||||
|
||||
if flags & C.VM_CALL_KWARG != 0
|
||||
if flags & C::VM_CALL_KWARG != 0
|
||||
asm.incr_counter(:send_kwarg)
|
||||
return CantCompile
|
||||
end
|
||||
if flags & C.VM_CALL_KW_SPLAT != 0
|
||||
if flags & C::VM_CALL_KW_SPLAT != 0
|
||||
asm.incr_counter(:send_kw_splat)
|
||||
return CantCompile
|
||||
end
|
||||
|
@ -3080,7 +3080,7 @@ module RubyVM::RJIT
|
|||
|
||||
# Check that we'll be able to write this method dispatch before generating checks
|
||||
cme_def_type = cme.def.type
|
||||
if cme_def_type != C.VM_METHOD_TYPE_ISEQ && cme_def_type != C.VM_METHOD_TYPE_CFUNC
|
||||
if cme_def_type != C::VM_METHOD_TYPE_ISEQ && cme_def_type != C::VM_METHOD_TYPE_CFUNC
|
||||
# others unimplemented
|
||||
return CantCompile
|
||||
end
|
||||
|
@ -3118,18 +3118,18 @@ module RubyVM::RJIT
|
|||
# @param send_shift [Integer] The number of shifts needed for VM_CALL_OPT_SEND
|
||||
def jit_call_method(jit, ctx, asm, mid, argc, flags, cme, block_handler, known_recv_class, send_shift: 0)
|
||||
# The main check of vm_call_method before vm_call_method_each_type
|
||||
case C.METHOD_ENTRY_VISI(cme)
|
||||
when C.METHOD_VISI_PUBLIC
|
||||
case C::METHOD_ENTRY_VISI(cme)
|
||||
when C::METHOD_VISI_PUBLIC
|
||||
# You can always call public methods
|
||||
when C.METHOD_VISI_PRIVATE
|
||||
when C::METHOD_VISI_PRIVATE
|
||||
# Allow only callsites without a receiver
|
||||
if flags & C.VM_CALL_FCALL == 0
|
||||
if flags & C::VM_CALL_FCALL == 0
|
||||
asm.incr_counter(:send_private)
|
||||
return CantCompile
|
||||
end
|
||||
when C.METHOD_VISI_PROTECTED
|
||||
when C::METHOD_VISI_PROTECTED
|
||||
# If the method call is an FCALL, it is always valid
|
||||
if flags & C.VM_CALL_FCALL == 0
|
||||
if flags & C::VM_CALL_FCALL == 0
|
||||
# otherwise we need an ancestry check to ensure the receiver is valid to be called as protected
|
||||
jit_protected_callee_ancestry_guard(asm, cme, side_exit(jit, ctx))
|
||||
end
|
||||
|
@ -3139,9 +3139,9 @@ module RubyVM::RJIT
|
|||
end
|
||||
|
||||
# Get a compile-time receiver
|
||||
recv_idx = argc + (flags & C.VM_CALL_ARGS_BLOCKARG != 0 ? 1 : 0) # blockarg is not popped yet
|
||||
recv_idx = argc + (flags & C::VM_CALL_ARGS_BLOCKARG != 0 ? 1 : 0) # blockarg is not popped yet
|
||||
recv_idx += send_shift
|
||||
comptime_recv = jit.peek_at_stack(recv_idx + (flags & C.VM_CALL_ARGS_BLOCKARG != 0 ? 1 : 0)) # this offset is in ctx but not in SP
|
||||
comptime_recv = jit.peek_at_stack(recv_idx + (flags & C::VM_CALL_ARGS_BLOCKARG != 0 ? 1 : 0)) # this offset is in ctx but not in SP
|
||||
recv_opnd = ctx.stack_opnd(recv_idx)
|
||||
|
||||
jit_call_method_each_type(jit, ctx, asm, argc, flags, cme, comptime_recv, recv_opnd, block_handler, known_recv_class, send_shift:)
|
||||
|
@ -3168,35 +3168,35 @@ module RubyVM::RJIT
|
|||
# @param asm [RubyVM::RJIT::Assembler]
|
||||
def jit_call_method_each_type(jit, ctx, asm, argc, flags, cme, comptime_recv, recv_opnd, block_handler, known_recv_class, send_shift:)
|
||||
case cme.def.type
|
||||
when C.VM_METHOD_TYPE_ISEQ
|
||||
when C::VM_METHOD_TYPE_ISEQ
|
||||
iseq = def_iseq_ptr(cme.def)
|
||||
jit_call_iseq_setup(jit, ctx, asm, cme, flags, argc, iseq, block_handler, send_shift:)
|
||||
when C.VM_METHOD_TYPE_NOTIMPLEMENTED
|
||||
when C::VM_METHOD_TYPE_NOTIMPLEMENTED
|
||||
asm.incr_counter(:send_notimplemented)
|
||||
return CantCompile
|
||||
when C.VM_METHOD_TYPE_CFUNC
|
||||
when C::VM_METHOD_TYPE_CFUNC
|
||||
jit_call_cfunc(jit, ctx, asm, cme, flags, argc, block_handler, known_recv_class, send_shift:)
|
||||
when C.VM_METHOD_TYPE_ATTRSET
|
||||
when C::VM_METHOD_TYPE_ATTRSET
|
||||
asm.incr_counter(:send_attrset)
|
||||
return CantCompile
|
||||
when C.VM_METHOD_TYPE_IVAR
|
||||
when C::VM_METHOD_TYPE_IVAR
|
||||
jit_call_ivar(jit, ctx, asm, cme, flags, argc, comptime_recv, recv_opnd, send_shift:)
|
||||
when C.VM_METHOD_TYPE_MISSING
|
||||
when C::VM_METHOD_TYPE_MISSING
|
||||
asm.incr_counter(:send_missing)
|
||||
return CantCompile
|
||||
when C.VM_METHOD_TYPE_BMETHOD
|
||||
when C::VM_METHOD_TYPE_BMETHOD
|
||||
jit_call_bmethod(jit, ctx, asm, argc, flags, cme, comptime_recv, recv_opnd, block_handler, known_recv_class, send_shift:)
|
||||
when C.VM_METHOD_TYPE_ALIAS
|
||||
when C::VM_METHOD_TYPE_ALIAS
|
||||
jit_call_alias(jit, ctx, asm, argc, flags, cme, comptime_recv, recv_opnd, block_handler, known_recv_class, send_shift:)
|
||||
when C.VM_METHOD_TYPE_OPTIMIZED
|
||||
when C::VM_METHOD_TYPE_OPTIMIZED
|
||||
jit_call_optimized(jit, ctx, asm, cme, flags, argc, block_handler, known_recv_class, send_shift:)
|
||||
when C.VM_METHOD_TYPE_UNDEF
|
||||
when C::VM_METHOD_TYPE_UNDEF
|
||||
asm.incr_counter(:send_undef)
|
||||
return CantCompile
|
||||
when C.VM_METHOD_TYPE_ZSUPER
|
||||
when C::VM_METHOD_TYPE_ZSUPER
|
||||
asm.incr_counter(:send_zsuper)
|
||||
return CantCompile
|
||||
when C.VM_METHOD_TYPE_REFINED
|
||||
when C::VM_METHOD_TYPE_REFINED
|
||||
asm.incr_counter(:send_refined)
|
||||
return CantCompile
|
||||
else
|
||||
|
@ -3215,7 +3215,7 @@ module RubyVM::RJIT
|
|||
return CantCompile
|
||||
end
|
||||
|
||||
if flags & C.VM_CALL_TAILCALL != 0
|
||||
if flags & C::VM_CALL_TAILCALL != 0
|
||||
# We don't support vm_call_iseq_setup_tailcall
|
||||
asm.incr_counter(:send_tailcall)
|
||||
return CantCompile
|
||||
|
@ -3229,19 +3229,19 @@ module RubyVM::RJIT
|
|||
# @param asm [RubyVM::RJIT::Assembler]
|
||||
def jit_call_iseq_setup_normal(jit, ctx, asm, cme, flags, argc, iseq, block_handler, opt_pc, send_shift:, frame_type:, prev_ep:)
|
||||
# We will not have side exits from here. Adjust the stack.
|
||||
if flags & C.VM_CALL_OPT_SEND != 0
|
||||
if flags & C::VM_CALL_OPT_SEND != 0
|
||||
jit_call_opt_send_shift_stack(ctx, asm, argc, send_shift:)
|
||||
end
|
||||
|
||||
# Save caller SP and PC before pushing a callee frame for backtrace and side exits
|
||||
asm.comment('save SP to caller CFP')
|
||||
recv_idx = argc + (flags & C.VM_CALL_ARGS_BLOCKARG != 0 ? 1 : 0) # blockarg is not popped yet
|
||||
recv_idx = argc + (flags & C::VM_CALL_ARGS_BLOCKARG != 0 ? 1 : 0) # blockarg is not popped yet
|
||||
# Skip setting this to SP register. This cfp->sp will be copied to SP on leave insn.
|
||||
asm.lea(:rax, ctx.sp_opnd(C.VALUE.size * -(1 + recv_idx))) # Pop receiver and arguments to prepare for side exits
|
||||
asm.mov([CFP, C.rb_control_frame_t.offsetof(:sp)], :rax)
|
||||
jit_save_pc(jit, asm, comment: 'save PC to caller CFP')
|
||||
|
||||
frame_type ||= C.VM_FRAME_MAGIC_METHOD | C.VM_ENV_FLAG_LOCAL
|
||||
frame_type ||= C::VM_FRAME_MAGIC_METHOD | C::VM_ENV_FLAG_LOCAL
|
||||
jit_push_frame(
|
||||
jit, ctx, asm, cme, flags, argc, frame_type, block_handler,
|
||||
iseq: iseq,
|
||||
|
@ -3285,13 +3285,13 @@ module RubyVM::RJIT
|
|||
return CantCompile
|
||||
end
|
||||
|
||||
frame_type = C.VM_FRAME_MAGIC_CFUNC | C.VM_FRAME_FLAG_CFRAME | C.VM_ENV_FLAG_LOCAL
|
||||
if flags & C.VM_CALL_KW_SPLAT != 0
|
||||
frame_type |= C.VM_FRAME_FLAG_CFRAME_KW
|
||||
frame_type = C::VM_FRAME_MAGIC_CFUNC | C::VM_FRAME_FLAG_CFRAME | C::VM_ENV_FLAG_LOCAL
|
||||
if flags & C::VM_CALL_KW_SPLAT != 0
|
||||
frame_type |= C::VM_FRAME_FLAG_CFRAME_KW
|
||||
end
|
||||
|
||||
# EXEC_EVENT_HOOK: RUBY_EVENT_C_CALL and RUBY_EVENT_C_RETURN
|
||||
if C.rb_rjit_global_events & (C.RUBY_EVENT_C_CALL | C.RUBY_EVENT_C_RETURN) != 0
|
||||
if C.rb_rjit_global_events & (C::RUBY_EVENT_C_CALL | C::RUBY_EVENT_C_RETURN) != 0
|
||||
asm.incr_counter(:send_c_tracing)
|
||||
return CantCompile
|
||||
end
|
||||
|
@ -3307,7 +3307,7 @@ module RubyVM::RJIT
|
|||
end
|
||||
|
||||
# Delegate to codegen for C methods if we have it.
|
||||
if flags & C.VM_CALL_KWARG == 0 && flags & C.VM_CALL_OPT_SEND == 0
|
||||
if flags & C::VM_CALL_KWARG == 0 && flags & C::VM_CALL_OPT_SEND == 0
|
||||
known_cfunc_codegen = lookup_cfunc_codegen(cme.def)
|
||||
if known_cfunc_codegen&.call(jit, ctx, asm, argc, known_recv_class)
|
||||
# cfunc codegen generated code. Terminate the block so
|
||||
|
@ -3318,7 +3318,7 @@ module RubyVM::RJIT
|
|||
end
|
||||
|
||||
# We will not have side exits from here. Adjust the stack.
|
||||
if flags & C.VM_CALL_OPT_SEND != 0
|
||||
if flags & C::VM_CALL_OPT_SEND != 0
|
||||
jit_call_opt_send_shift_stack(ctx, asm, argc, send_shift:)
|
||||
end
|
||||
|
||||
|
@ -3327,7 +3327,7 @@ module RubyVM::RJIT
|
|||
|
||||
# Save caller SP and PC before pushing a callee frame for backtrace and side exits
|
||||
asm.comment('save SP to caller CFP')
|
||||
sp_index = -(1 + argc + (flags & C.VM_CALL_ARGS_BLOCKARG != 0 ? 1 : 0)) # Pop receiver and arguments for side exits. blockarg is not popped yet
|
||||
sp_index = -(1 + argc + (flags & C::VM_CALL_ARGS_BLOCKARG != 0 ? 1 : 0)) # Pop receiver and arguments for side exits. blockarg is not popped yet
|
||||
asm.lea(SP, ctx.sp_opnd(C.VALUE.size * sp_index))
|
||||
asm.mov([CFP, C.rb_control_frame_t.offsetof(:sp)], SP)
|
||||
ctx.sp_offset = -sp_index
|
||||
|
@ -3372,7 +3372,7 @@ module RubyVM::RJIT
|
|||
# @param ctx [RubyVM::RJIT::Context]
|
||||
# @param asm [RubyVM::RJIT::Assembler]
|
||||
def jit_call_ivar(jit, ctx, asm, cme, flags, argc, comptime_recv, recv_opnd, send_shift:)
|
||||
if flags & C.VM_CALL_ARGS_SPLAT != 0
|
||||
if flags & C::VM_CALL_ARGS_SPLAT != 0
|
||||
asm.incr_counter(:send_ivar_splat)
|
||||
return CantCompile
|
||||
end
|
||||
|
@ -3383,7 +3383,7 @@ module RubyVM::RJIT
|
|||
end
|
||||
|
||||
# We don't support jit_call_opt_send_shift_stack for this yet.
|
||||
if flags & C.VM_CALL_OPT_SEND != 0
|
||||
if flags & C::VM_CALL_OPT_SEND != 0
|
||||
asm.incr_counter(:send_ivar_opt_send)
|
||||
return CantCompile
|
||||
end
|
||||
|
@ -3391,7 +3391,7 @@ module RubyVM::RJIT
|
|||
ivar_id = cme.def.body.attr.id
|
||||
|
||||
# Not handling block_handler
|
||||
if flags & C.VM_CALL_ARGS_BLOCKARG != 0
|
||||
if flags & C::VM_CALL_ARGS_BLOCKARG != 0
|
||||
asm.incr_counter(:send_ivar_blockarg)
|
||||
return CantCompile
|
||||
end
|
||||
|
@ -3426,12 +3426,12 @@ module RubyVM::RJIT
|
|||
|
||||
# Passing a block to a block needs logic different from passing
|
||||
# a block to a method and sometimes requires allocation. Bail for now.
|
||||
if block_handler != C.VM_BLOCK_HANDLER_NONE
|
||||
if block_handler != C::VM_BLOCK_HANDLER_NONE
|
||||
asm.incr_counter(:send_bmethod_blockarg)
|
||||
return CantCompile
|
||||
end
|
||||
|
||||
frame_type = C.VM_FRAME_MAGIC_BLOCK | C.VM_FRAME_FLAG_BMETHOD | C.VM_FRAME_FLAG_LAMBDA
|
||||
frame_type = C::VM_FRAME_MAGIC_BLOCK | C::VM_FRAME_FLAG_BMETHOD | C::VM_FRAME_FLAG_LAMBDA
|
||||
prev_ep = capture.ep
|
||||
jit_call_iseq_setup(jit, ctx, asm, cme, flags, argc, iseq, block_handler, send_shift:, frame_type:, prev_ep:)
|
||||
end
|
||||
|
@ -3450,23 +3450,23 @@ module RubyVM::RJIT
|
|||
# @param ctx [RubyVM::RJIT::Context]
|
||||
# @param asm [RubyVM::RJIT::Assembler]
|
||||
def jit_call_optimized(jit, ctx, asm, cme, flags, argc, block_handler, known_recv_class, send_shift:)
|
||||
if flags & C.VM_CALL_ARGS_BLOCKARG != 0
|
||||
if flags & C::VM_CALL_ARGS_BLOCKARG != 0
|
||||
# Not working yet
|
||||
asm.incr_counter(:send_optimized_blockarg)
|
||||
return CantCompile
|
||||
end
|
||||
|
||||
case cme.def.body.optimized.type
|
||||
when C.OPTIMIZED_METHOD_TYPE_SEND
|
||||
when C::OPTIMIZED_METHOD_TYPE_SEND
|
||||
jit_call_opt_send(jit, ctx, asm, cme, flags, argc, block_handler, known_recv_class, send_shift:)
|
||||
when C.OPTIMIZED_METHOD_TYPE_CALL
|
||||
when C::OPTIMIZED_METHOD_TYPE_CALL
|
||||
jit_call_opt_call(jit, ctx, asm, cme, flags, argc, block_handler, known_recv_class, send_shift:)
|
||||
when C.OPTIMIZED_METHOD_TYPE_BLOCK_CALL
|
||||
when C::OPTIMIZED_METHOD_TYPE_BLOCK_CALL
|
||||
asm.incr_counter(:send_optimized_block_call)
|
||||
return CantCompile
|
||||
when C.OPTIMIZED_METHOD_TYPE_STRUCT_AREF
|
||||
when C::OPTIMIZED_METHOD_TYPE_STRUCT_AREF
|
||||
jit_call_opt_struct_aref(jit, ctx, asm, cme, flags, argc, block_handler, known_recv_class, send_shift:)
|
||||
when C.OPTIMIZED_METHOD_TYPE_STRUCT_ASET
|
||||
when C::OPTIMIZED_METHOD_TYPE_STRUCT_ASET
|
||||
asm.incr_counter(:send_optimized_struct_aset)
|
||||
return CantCompile
|
||||
else
|
||||
|
@ -3499,8 +3499,8 @@ module RubyVM::RJIT
|
|||
# where you never exit. `send_shift` signals to lazily shift the stack by this amount.
|
||||
send_shift += 1
|
||||
|
||||
kw_splat = flags & C.VM_CALL_KW_SPLAT != 0
|
||||
jit_call_symbol(jit, ctx, asm, cme, C.VM_CALL_FCALL, argc, kw_splat, block_handler, known_recv_class, send_shift:)
|
||||
kw_splat = flags & C::VM_CALL_KW_SPLAT != 0
|
||||
jit_call_symbol(jit, ctx, asm, cme, C::VM_CALL_FCALL, argc, kw_splat, block_handler, known_recv_class, send_shift:)
|
||||
end
|
||||
|
||||
# vm_call_opt_call
|
||||
|
@ -3508,17 +3508,17 @@ module RubyVM::RJIT
|
|||
# @param ctx [RubyVM::RJIT::Context]
|
||||
# @param asm [RubyVM::RJIT::Assembler]
|
||||
def jit_call_opt_call(jit, ctx, asm, cme, flags, argc, block_handler, known_recv_class, send_shift:)
|
||||
if block_handler != C.VM_BLOCK_HANDLER_NONE
|
||||
if block_handler != C::VM_BLOCK_HANDLER_NONE
|
||||
asm.incr_counter(:send_optimized_call_block)
|
||||
return CantCompile
|
||||
end
|
||||
|
||||
if flags & C.VM_CALL_KWARG != 0
|
||||
if flags & C::VM_CALL_KWARG != 0
|
||||
asm.incr_counter(:send_optimized_call_kwarg)
|
||||
return CantCompile
|
||||
end
|
||||
|
||||
if flags & C.VM_CALL_ARGS_SPLAT != 0
|
||||
if flags & C::VM_CALL_ARGS_SPLAT != 0
|
||||
asm.incr_counter(:send_optimized_call_splat)
|
||||
return CantCompile
|
||||
end
|
||||
|
@ -3531,7 +3531,7 @@ module RubyVM::RJIT
|
|||
# end
|
||||
|
||||
# If this is a .send call we need to adjust the stack
|
||||
if flags & C.VM_CALL_OPT_SEND != 0
|
||||
if flags & C::VM_CALL_OPT_SEND != 0
|
||||
jit_call_opt_send_shift_stack(ctx, asm, argc, send_shift:)
|
||||
end
|
||||
|
||||
|
@ -3544,14 +3544,14 @@ module RubyVM::RJIT
|
|||
|
||||
asm.lea(:rax, ctx.sp_opnd(0)) # sp
|
||||
|
||||
kw_splat = flags & C.VM_CALL_KW_SPLAT
|
||||
kw_splat = flags & C::VM_CALL_KW_SPLAT
|
||||
|
||||
asm.mov(C_ARGS[0], :rcx)
|
||||
asm.mov(C_ARGS[1], EC)
|
||||
asm.mov(C_ARGS[2], argc)
|
||||
asm.lea(C_ARGS[3], [:rax, -argc * C.VALUE.size]) # stack_argument_pointer. NOTE: C_ARGS[3] is rcx
|
||||
asm.mov(C_ARGS[4], kw_splat)
|
||||
asm.mov(C_ARGS[5], C.VM_BLOCK_HANDLER_NONE)
|
||||
asm.mov(C_ARGS[5], C::VM_BLOCK_HANDLER_NONE)
|
||||
asm.call(C.rjit_optimized_call)
|
||||
|
||||
ctx.stack_pop(argc + 1)
|
||||
|
@ -3578,7 +3578,7 @@ module RubyVM::RJIT
|
|||
comptime_recv = jit.peek_at_stack(recv_idx)
|
||||
|
||||
# This is a .send call and we need to adjust the stack
|
||||
if flags & C.VM_CALL_OPT_SEND != 0
|
||||
if flags & C::VM_CALL_OPT_SEND != 0
|
||||
jit_call_opt_send_shift_stack(ctx, asm, argc, send_shift:)
|
||||
end
|
||||
|
||||
|
@ -3586,7 +3586,7 @@ module RubyVM::RJIT
|
|||
# length. So if our comptime_recv is embedded all runtime
|
||||
# structs of the same class should be as well, and the same is
|
||||
# true of the converse.
|
||||
embedded = C.FL_TEST_RAW(comptime_recv, C.RSTRUCT_EMBED_LEN_MASK)
|
||||
embedded = C::FL_TEST_RAW(comptime_recv, C::RSTRUCT_EMBED_LEN_MASK)
|
||||
|
||||
asm.comment('struct aref')
|
||||
asm.mov(:rax, ctx.stack_pop(1)) # recv
|
||||
|
@ -3627,7 +3627,7 @@ module RubyVM::RJIT
|
|||
# @param ctx [RubyVM::RJIT::Context]
|
||||
# @param asm [RubyVM::RJIT::Assembler]
|
||||
def jit_call_symbol(jit, ctx, asm, cme, flags, argc, kw_splat, block_handler, known_recv_class, send_shift:)
|
||||
flags |= C.VM_CALL_OPT_SEND | (kw_splat ? C.VM_CALL_KW_SPLAT : 0)
|
||||
flags |= C::VM_CALL_OPT_SEND | (kw_splat ? C::VM_CALL_KW_SPLAT : 0)
|
||||
|
||||
comptime_symbol = jit.peek_at_stack(argc)
|
||||
if comptime_symbol.class != String && !static_symbol?(comptime_symbol)
|
||||
|
@ -3656,7 +3656,7 @@ module RubyVM::RJIT
|
|||
return CantCompile
|
||||
end
|
||||
|
||||
if flags & C.VM_CALL_FCALL != 0
|
||||
if flags & C::VM_CALL_FCALL != 0
|
||||
return jit_call_method(jit, ctx, asm, mid, argc, flags, cme, block_handler, known_recv_class, send_shift:)
|
||||
end
|
||||
|
||||
|
@ -3679,7 +3679,7 @@ module RubyVM::RJIT
|
|||
asm.jbe(counted_exit(side_exit(jit, ctx), :send_stackoverflow))
|
||||
|
||||
# Pop blockarg after all side exits
|
||||
if flags & C.VM_CALL_ARGS_BLOCKARG != 0
|
||||
if flags & C::VM_CALL_ARGS_BLOCKARG != 0
|
||||
ctx.stack_pop(1)
|
||||
end
|
||||
|
||||
|
@ -3704,8 +3704,8 @@ module RubyVM::RJIT
|
|||
if prev_ep
|
||||
asm.mov(:rax, prev_ep.to_i | 1) # tagged prev ep
|
||||
asm.mov([SP, C.VALUE.size * (ep_offset - 1)], :rax)
|
||||
elsif block_handler == C.VM_BLOCK_HANDLER_NONE
|
||||
asm.mov([SP, C.VALUE.size * (ep_offset - 1)], C.VM_BLOCK_HANDLER_NONE)
|
||||
elsif block_handler == C::VM_BLOCK_HANDLER_NONE
|
||||
asm.mov([SP, C.VALUE.size * (ep_offset - 1)], C::VM_BLOCK_HANDLER_NONE)
|
||||
elsif block_handler == C.rb_block_param_proxy
|
||||
# vm_caller_setup_arg_block:
|
||||
# VALUE handler = VM_CF_BLOCK_HANDLER(reg_cfp);
|
||||
|
@ -3787,7 +3787,7 @@ module RubyVM::RJIT
|
|||
# @param ctx [RubyVM::RJIT::Context]
|
||||
# @param asm [RubyVM::RJIT::Assembler]
|
||||
def jit_callee_setup_arg(jit, ctx, asm, flags, argc, iseq)
|
||||
if flags & C.VM_CALL_KW_SPLAT == 0
|
||||
if flags & C::VM_CALL_KW_SPLAT == 0
|
||||
if C.rb_simple_iseq_p(iseq)
|
||||
if jit_caller_setup_arg(jit, ctx, asm, flags) == CantCompile
|
||||
return CantCompile
|
||||
|
@ -3822,7 +3822,7 @@ module RubyVM::RJIT
|
|||
# Qnil push is handled in jit_push_frame
|
||||
|
||||
return iseq.body.param.opt_table[opt]
|
||||
elsif C.rb_iseq_only_kwparam_p(iseq) && (flags & C.VM_CALL_ARGS_SPLAT) == 0
|
||||
elsif C.rb_iseq_only_kwparam_p(iseq) && (flags & C::VM_CALL_ARGS_SPLAT) == 0
|
||||
asm.incr_counter(:send_iseq_kwparam)
|
||||
return CantCompile
|
||||
end
|
||||
|
@ -3838,12 +3838,12 @@ module RubyVM::RJIT
|
|||
# @param ctx [RubyVM::RJIT::Context]
|
||||
# @param asm [RubyVM::RJIT::Assembler]
|
||||
def jit_caller_setup_arg(jit, ctx, asm, flags)
|
||||
if flags & C.VM_CALL_ARGS_SPLAT != 0
|
||||
if flags & C::VM_CALL_ARGS_SPLAT != 0
|
||||
# We don't support vm_caller_setup_arg_splat
|
||||
asm.incr_counter(:send_args_splat)
|
||||
return CantCompile
|
||||
end
|
||||
if flags & (C.VM_CALL_KWARG | C.VM_CALL_KW_SPLAT) != 0
|
||||
if flags & (C::VM_CALL_KWARG | C::VM_CALL_KW_SPLAT) != 0
|
||||
# We don't support keyword args either
|
||||
asm.incr_counter(:send_kwarg)
|
||||
return CantCompile
|
||||
|
@ -3855,7 +3855,7 @@ module RubyVM::RJIT
|
|||
# @param ctx [RubyVM::RJIT::Context]
|
||||
# @param asm [RubyVM::RJIT::Assembler]
|
||||
def jit_caller_remove_empty_kw_splat(jit, ctx, asm, flags)
|
||||
if (flags & C.VM_CALL_KW_SPLAT) > 0
|
||||
if (flags & C::VM_CALL_KW_SPLAT) > 0
|
||||
# We don't support removing the last Hash argument
|
||||
asm.incr_counter(:send_kw_splat)
|
||||
return CantCompile
|
||||
|
@ -3871,11 +3871,11 @@ module RubyVM::RJIT
|
|||
asm.mov(len_reg, [array_reg, C.RBasic.offsetof(:flags)])
|
||||
|
||||
# Get the length of the array
|
||||
asm.and(len_reg, C.RARRAY_EMBED_LEN_MASK)
|
||||
asm.sar(len_reg, C.RARRAY_EMBED_LEN_SHIFT)
|
||||
asm.and(len_reg, C::RARRAY_EMBED_LEN_MASK)
|
||||
asm.sar(len_reg, C::RARRAY_EMBED_LEN_SHIFT)
|
||||
|
||||
# Conditionally move the length of the heap array
|
||||
asm.test([array_reg, C.RBasic.offsetof(:flags)], C.RARRAY_EMBED_FLAG)
|
||||
asm.test([array_reg, C.RBasic.offsetof(:flags)], C::RARRAY_EMBED_FLAG)
|
||||
|
||||
# Select the array length value
|
||||
asm.cmovz(len_reg, [array_reg, C.RArray.offsetof(:as, :heap, :len)])
|
||||
|
@ -3888,19 +3888,19 @@ module RubyVM::RJIT
|
|||
end
|
||||
|
||||
def fixnum?(obj)
|
||||
(C.to_value(obj) & C.RUBY_FIXNUM_FLAG) == C.RUBY_FIXNUM_FLAG
|
||||
(C.to_value(obj) & C::RUBY_FIXNUM_FLAG) == C::RUBY_FIXNUM_FLAG
|
||||
end
|
||||
|
||||
def flonum?(obj)
|
||||
(C.to_value(obj) & C.RUBY_FLONUM_MASK) == C.RUBY_FLONUM_FLAG
|
||||
(C.to_value(obj) & C::RUBY_FLONUM_MASK) == C::RUBY_FLONUM_FLAG
|
||||
end
|
||||
|
||||
def static_symbol?(obj)
|
||||
(C.to_value(obj) & 0xff) == C.RUBY_SYMBOL_FLAG
|
||||
(C.to_value(obj) & 0xff) == C::RUBY_SYMBOL_FLAG
|
||||
end
|
||||
|
||||
def shape_too_complex?(obj)
|
||||
C.rb_shape_get_shape_id(obj) == C.OBJ_TOO_COMPLEX_SHAPE_ID
|
||||
C.rb_shape_get_shape_id(obj) == C::OBJ_TOO_COMPLEX_SHAPE_ID
|
||||
end
|
||||
|
||||
# @param jit [RubyVM::RJIT::JITState]
|
||||
|
|
450
rjit_c.rb
450
rjit_c.rb
|
@ -314,366 +314,96 @@ module RubyVM::RJIT # :nodoc: all
|
|||
|
||||
C::VM_ENV_DATA_INDEX_ME_CREF = Primitive.cexpr! %q{ LONG2NUM(VM_ENV_DATA_INDEX_ME_CREF) }
|
||||
C::VM_ENV_DATA_INDEX_SPECVAL = Primitive.cexpr! %q{ LONG2NUM(VM_ENV_DATA_INDEX_SPECVAL) }
|
||||
|
||||
def C.ARRAY_REDEFINED_OP_FLAG
|
||||
Primitive.cexpr! %q{ SIZET2NUM(ARRAY_REDEFINED_OP_FLAG) }
|
||||
end
|
||||
|
||||
def C.BOP_AND
|
||||
Primitive.cexpr! %q{ SIZET2NUM(BOP_AND) }
|
||||
end
|
||||
|
||||
def C.BOP_AREF
|
||||
Primitive.cexpr! %q{ SIZET2NUM(BOP_AREF) }
|
||||
end
|
||||
|
||||
def C.BOP_EQ
|
||||
Primitive.cexpr! %q{ SIZET2NUM(BOP_EQ) }
|
||||
end
|
||||
|
||||
def C.BOP_FREEZE
|
||||
Primitive.cexpr! %q{ SIZET2NUM(BOP_FREEZE) }
|
||||
end
|
||||
|
||||
def C.BOP_GE
|
||||
Primitive.cexpr! %q{ SIZET2NUM(BOP_GE) }
|
||||
end
|
||||
|
||||
def C.BOP_GT
|
||||
Primitive.cexpr! %q{ SIZET2NUM(BOP_GT) }
|
||||
end
|
||||
|
||||
def C.BOP_LE
|
||||
Primitive.cexpr! %q{ SIZET2NUM(BOP_LE) }
|
||||
end
|
||||
|
||||
def C.BOP_LT
|
||||
Primitive.cexpr! %q{ SIZET2NUM(BOP_LT) }
|
||||
end
|
||||
|
||||
def C.BOP_MINUS
|
||||
Primitive.cexpr! %q{ SIZET2NUM(BOP_MINUS) }
|
||||
end
|
||||
|
||||
def C.BOP_MOD
|
||||
Primitive.cexpr! %q{ SIZET2NUM(BOP_MOD) }
|
||||
end
|
||||
|
||||
def C.BOP_OR
|
||||
Primitive.cexpr! %q{ SIZET2NUM(BOP_OR) }
|
||||
end
|
||||
|
||||
def C.BOP_PLUS
|
||||
Primitive.cexpr! %q{ SIZET2NUM(BOP_PLUS) }
|
||||
end
|
||||
|
||||
def C.HASH_REDEFINED_OP_FLAG
|
||||
Primitive.cexpr! %q{ SIZET2NUM(HASH_REDEFINED_OP_FLAG) }
|
||||
end
|
||||
|
||||
def C.INTEGER_REDEFINED_OP_FLAG
|
||||
Primitive.cexpr! %q{ SIZET2NUM(INTEGER_REDEFINED_OP_FLAG) }
|
||||
end
|
||||
|
||||
def C.INVALID_SHAPE_ID
|
||||
Primitive.cexpr! %q{ SIZET2NUM(INVALID_SHAPE_ID) }
|
||||
end
|
||||
|
||||
def C.METHOD_VISI_PRIVATE
|
||||
Primitive.cexpr! %q{ SIZET2NUM(METHOD_VISI_PRIVATE) }
|
||||
end
|
||||
|
||||
def C.METHOD_VISI_PROTECTED
|
||||
Primitive.cexpr! %q{ SIZET2NUM(METHOD_VISI_PROTECTED) }
|
||||
end
|
||||
|
||||
def C.METHOD_VISI_PUBLIC
|
||||
Primitive.cexpr! %q{ SIZET2NUM(METHOD_VISI_PUBLIC) }
|
||||
end
|
||||
|
||||
def C.OBJ_TOO_COMPLEX_SHAPE_ID
|
||||
Primitive.cexpr! %q{ SIZET2NUM(OBJ_TOO_COMPLEX_SHAPE_ID) }
|
||||
end
|
||||
|
||||
def C.OPTIMIZED_METHOD_TYPE_BLOCK_CALL
|
||||
Primitive.cexpr! %q{ SIZET2NUM(OPTIMIZED_METHOD_TYPE_BLOCK_CALL) }
|
||||
end
|
||||
|
||||
def C.OPTIMIZED_METHOD_TYPE_CALL
|
||||
Primitive.cexpr! %q{ SIZET2NUM(OPTIMIZED_METHOD_TYPE_CALL) }
|
||||
end
|
||||
|
||||
def C.OPTIMIZED_METHOD_TYPE_SEND
|
||||
Primitive.cexpr! %q{ SIZET2NUM(OPTIMIZED_METHOD_TYPE_SEND) }
|
||||
end
|
||||
|
||||
def C.OPTIMIZED_METHOD_TYPE_STRUCT_AREF
|
||||
Primitive.cexpr! %q{ SIZET2NUM(OPTIMIZED_METHOD_TYPE_STRUCT_AREF) }
|
||||
end
|
||||
|
||||
def C.OPTIMIZED_METHOD_TYPE_STRUCT_ASET
|
||||
Primitive.cexpr! %q{ SIZET2NUM(OPTIMIZED_METHOD_TYPE_STRUCT_ASET) }
|
||||
end
|
||||
|
||||
def C.RARRAY_EMBED_FLAG
|
||||
Primitive.cexpr! %q{ SIZET2NUM(RARRAY_EMBED_FLAG) }
|
||||
end
|
||||
|
||||
def C.RARRAY_EMBED_LEN_MASK
|
||||
Primitive.cexpr! %q{ SIZET2NUM(RARRAY_EMBED_LEN_MASK) }
|
||||
end
|
||||
|
||||
def C.RARRAY_EMBED_LEN_SHIFT
|
||||
Primitive.cexpr! %q{ SIZET2NUM(RARRAY_EMBED_LEN_SHIFT) }
|
||||
end
|
||||
|
||||
def C.RMODULE_IS_REFINEMENT
|
||||
Primitive.cexpr! %q{ SIZET2NUM(RMODULE_IS_REFINEMENT) }
|
||||
end
|
||||
|
||||
def C.ROBJECT_EMBED
|
||||
Primitive.cexpr! %q{ SIZET2NUM(ROBJECT_EMBED) }
|
||||
end
|
||||
|
||||
def C.RSTRUCT_EMBED_LEN_MASK
|
||||
Primitive.cexpr! %q{ SIZET2NUM(RSTRUCT_EMBED_LEN_MASK) }
|
||||
end
|
||||
|
||||
def C.RUBY_EVENT_CLASS
|
||||
Primitive.cexpr! %q{ SIZET2NUM(RUBY_EVENT_CLASS) }
|
||||
end
|
||||
|
||||
def C.RUBY_EVENT_C_CALL
|
||||
Primitive.cexpr! %q{ SIZET2NUM(RUBY_EVENT_C_CALL) }
|
||||
end
|
||||
|
||||
def C.RUBY_EVENT_C_RETURN
|
||||
Primitive.cexpr! %q{ SIZET2NUM(RUBY_EVENT_C_RETURN) }
|
||||
end
|
||||
|
||||
def C.RUBY_FIXNUM_FLAG
|
||||
Primitive.cexpr! %q{ SIZET2NUM(RUBY_FIXNUM_FLAG) }
|
||||
end
|
||||
|
||||
def C.RUBY_FLONUM_FLAG
|
||||
Primitive.cexpr! %q{ SIZET2NUM(RUBY_FLONUM_FLAG) }
|
||||
end
|
||||
|
||||
def C.RUBY_FLONUM_MASK
|
||||
Primitive.cexpr! %q{ SIZET2NUM(RUBY_FLONUM_MASK) }
|
||||
end
|
||||
|
||||
def C.RUBY_FL_SINGLETON
|
||||
Primitive.cexpr! %q{ SIZET2NUM(RUBY_FL_SINGLETON) }
|
||||
end
|
||||
|
||||
def C.RUBY_IMMEDIATE_MASK
|
||||
Primitive.cexpr! %q{ SIZET2NUM(RUBY_IMMEDIATE_MASK) }
|
||||
end
|
||||
|
||||
def C.RUBY_SPECIAL_SHIFT
|
||||
Primitive.cexpr! %q{ SIZET2NUM(RUBY_SPECIAL_SHIFT) }
|
||||
end
|
||||
|
||||
def C.RUBY_SYMBOL_FLAG
|
||||
Primitive.cexpr! %q{ SIZET2NUM(RUBY_SYMBOL_FLAG) }
|
||||
end
|
||||
|
||||
def C.RUBY_T_ARRAY
|
||||
Primitive.cexpr! %q{ SIZET2NUM(RUBY_T_ARRAY) }
|
||||
end
|
||||
|
||||
def C.RUBY_T_ICLASS
|
||||
Primitive.cexpr! %q{ SIZET2NUM(RUBY_T_ICLASS) }
|
||||
end
|
||||
|
||||
def C.RUBY_T_MASK
|
||||
Primitive.cexpr! %q{ SIZET2NUM(RUBY_T_MASK) }
|
||||
end
|
||||
|
||||
def C.RUBY_T_MODULE
|
||||
Primitive.cexpr! %q{ SIZET2NUM(RUBY_T_MODULE) }
|
||||
end
|
||||
|
||||
def C.RUBY_T_STRING
|
||||
Primitive.cexpr! %q{ SIZET2NUM(RUBY_T_STRING) }
|
||||
end
|
||||
|
||||
def C.SHAPE_CAPACITY_CHANGE
|
||||
Primitive.cexpr! %q{ SIZET2NUM(SHAPE_CAPACITY_CHANGE) }
|
||||
end
|
||||
|
||||
def C.SHAPE_FLAG_SHIFT
|
||||
Primitive.cexpr! %q{ SIZET2NUM(SHAPE_FLAG_SHIFT) }
|
||||
end
|
||||
|
||||
def C.SHAPE_FROZEN
|
||||
Primitive.cexpr! %q{ SIZET2NUM(SHAPE_FROZEN) }
|
||||
end
|
||||
|
||||
def C.SHAPE_ID_NUM_BITS
|
||||
Primitive.cexpr! %q{ SIZET2NUM(SHAPE_ID_NUM_BITS) }
|
||||
end
|
||||
|
||||
def C.SHAPE_INITIAL_CAPACITY
|
||||
Primitive.cexpr! %q{ SIZET2NUM(SHAPE_INITIAL_CAPACITY) }
|
||||
end
|
||||
|
||||
def C.SHAPE_IVAR
|
||||
Primitive.cexpr! %q{ SIZET2NUM(SHAPE_IVAR) }
|
||||
end
|
||||
|
||||
def C.SHAPE_MASK
|
||||
Primitive.cexpr! %q{ SIZET2NUM(SHAPE_MASK) }
|
||||
end
|
||||
|
||||
def C.SHAPE_ROOT
|
||||
Primitive.cexpr! %q{ SIZET2NUM(SHAPE_ROOT) }
|
||||
end
|
||||
|
||||
def C.STRING_REDEFINED_OP_FLAG
|
||||
Primitive.cexpr! %q{ SIZET2NUM(STRING_REDEFINED_OP_FLAG) }
|
||||
end
|
||||
|
||||
def C.T_OBJECT
|
||||
Primitive.cexpr! %q{ SIZET2NUM(T_OBJECT) }
|
||||
end
|
||||
|
||||
def C.VM_BLOCK_HANDLER_NONE
|
||||
Primitive.cexpr! %q{ SIZET2NUM(VM_BLOCK_HANDLER_NONE) }
|
||||
end
|
||||
|
||||
def C.VM_CALL_ARGS_BLOCKARG
|
||||
Primitive.cexpr! %q{ SIZET2NUM(VM_CALL_ARGS_BLOCKARG) }
|
||||
end
|
||||
|
||||
def C.VM_CALL_ARGS_SPLAT
|
||||
Primitive.cexpr! %q{ SIZET2NUM(VM_CALL_ARGS_SPLAT) }
|
||||
end
|
||||
|
||||
def C.VM_CALL_FCALL
|
||||
Primitive.cexpr! %q{ SIZET2NUM(VM_CALL_FCALL) }
|
||||
end
|
||||
|
||||
def C.VM_CALL_KWARG
|
||||
Primitive.cexpr! %q{ SIZET2NUM(VM_CALL_KWARG) }
|
||||
end
|
||||
|
||||
def C.VM_CALL_KW_SPLAT
|
||||
Primitive.cexpr! %q{ SIZET2NUM(VM_CALL_KW_SPLAT) }
|
||||
end
|
||||
|
||||
def C.VM_CALL_KW_SPLAT_bit
|
||||
Primitive.cexpr! %q{ SIZET2NUM(VM_CALL_KW_SPLAT_bit) }
|
||||
end
|
||||
|
||||
def C.VM_CALL_OPT_SEND
|
||||
Primitive.cexpr! %q{ SIZET2NUM(VM_CALL_OPT_SEND) }
|
||||
end
|
||||
|
||||
def C.VM_CALL_TAILCALL
|
||||
Primitive.cexpr! %q{ SIZET2NUM(VM_CALL_TAILCALL) }
|
||||
end
|
||||
|
||||
def C.VM_CALL_TAILCALL_bit
|
||||
Primitive.cexpr! %q{ SIZET2NUM(VM_CALL_TAILCALL_bit) }
|
||||
end
|
||||
|
||||
def C.VM_ENV_DATA_INDEX_FLAGS
|
||||
Primitive.cexpr! %q{ SIZET2NUM(VM_ENV_DATA_INDEX_FLAGS) }
|
||||
end
|
||||
|
||||
def C.VM_ENV_DATA_SIZE
|
||||
Primitive.cexpr! %q{ SIZET2NUM(VM_ENV_DATA_SIZE) }
|
||||
end
|
||||
|
||||
def C.VM_ENV_FLAG_LOCAL
|
||||
Primitive.cexpr! %q{ SIZET2NUM(VM_ENV_FLAG_LOCAL) }
|
||||
end
|
||||
|
||||
def C.VM_ENV_FLAG_WB_REQUIRED
|
||||
Primitive.cexpr! %q{ SIZET2NUM(VM_ENV_FLAG_WB_REQUIRED) }
|
||||
end
|
||||
|
||||
def C.VM_FRAME_FLAG_BMETHOD
|
||||
Primitive.cexpr! %q{ SIZET2NUM(VM_FRAME_FLAG_BMETHOD) }
|
||||
end
|
||||
|
||||
def C.VM_FRAME_FLAG_CFRAME
|
||||
Primitive.cexpr! %q{ SIZET2NUM(VM_FRAME_FLAG_CFRAME) }
|
||||
end
|
||||
|
||||
def C.VM_FRAME_FLAG_CFRAME_KW
|
||||
Primitive.cexpr! %q{ SIZET2NUM(VM_FRAME_FLAG_CFRAME_KW) }
|
||||
end
|
||||
|
||||
def C.VM_FRAME_FLAG_LAMBDA
|
||||
Primitive.cexpr! %q{ SIZET2NUM(VM_FRAME_FLAG_LAMBDA) }
|
||||
end
|
||||
|
||||
def C.VM_FRAME_FLAG_MODIFIED_BLOCK_PARAM
|
||||
Primitive.cexpr! %q{ SIZET2NUM(VM_FRAME_FLAG_MODIFIED_BLOCK_PARAM) }
|
||||
end
|
||||
|
||||
def C.VM_FRAME_MAGIC_BLOCK
|
||||
Primitive.cexpr! %q{ SIZET2NUM(VM_FRAME_MAGIC_BLOCK) }
|
||||
end
|
||||
|
||||
def C.VM_FRAME_MAGIC_CFUNC
|
||||
Primitive.cexpr! %q{ SIZET2NUM(VM_FRAME_MAGIC_CFUNC) }
|
||||
end
|
||||
|
||||
def C.VM_FRAME_MAGIC_METHOD
|
||||
Primitive.cexpr! %q{ SIZET2NUM(VM_FRAME_MAGIC_METHOD) }
|
||||
end
|
||||
|
||||
def C.VM_METHOD_TYPE_ALIAS
|
||||
Primitive.cexpr! %q{ SIZET2NUM(VM_METHOD_TYPE_ALIAS) }
|
||||
end
|
||||
|
||||
def C.VM_METHOD_TYPE_ATTRSET
|
||||
Primitive.cexpr! %q{ SIZET2NUM(VM_METHOD_TYPE_ATTRSET) }
|
||||
end
|
||||
|
||||
def C.VM_METHOD_TYPE_BMETHOD
|
||||
Primitive.cexpr! %q{ SIZET2NUM(VM_METHOD_TYPE_BMETHOD) }
|
||||
end
|
||||
|
||||
def C.VM_METHOD_TYPE_CFUNC
|
||||
Primitive.cexpr! %q{ SIZET2NUM(VM_METHOD_TYPE_CFUNC) }
|
||||
end
|
||||
|
||||
def C.VM_METHOD_TYPE_ISEQ
|
||||
Primitive.cexpr! %q{ SIZET2NUM(VM_METHOD_TYPE_ISEQ) }
|
||||
end
|
||||
|
||||
def C.VM_METHOD_TYPE_IVAR
|
||||
Primitive.cexpr! %q{ SIZET2NUM(VM_METHOD_TYPE_IVAR) }
|
||||
end
|
||||
|
||||
def C.VM_METHOD_TYPE_MISSING
|
||||
Primitive.cexpr! %q{ SIZET2NUM(VM_METHOD_TYPE_MISSING) }
|
||||
end
|
||||
|
||||
def C.VM_METHOD_TYPE_NOTIMPLEMENTED
|
||||
Primitive.cexpr! %q{ SIZET2NUM(VM_METHOD_TYPE_NOTIMPLEMENTED) }
|
||||
end
|
||||
|
||||
def C.VM_METHOD_TYPE_OPTIMIZED
|
||||
Primitive.cexpr! %q{ SIZET2NUM(VM_METHOD_TYPE_OPTIMIZED) }
|
||||
end
|
||||
|
||||
def C.VM_METHOD_TYPE_REFINED
|
||||
Primitive.cexpr! %q{ SIZET2NUM(VM_METHOD_TYPE_REFINED) }
|
||||
end
|
||||
|
||||
def C.VM_METHOD_TYPE_UNDEF
|
||||
Primitive.cexpr! %q{ SIZET2NUM(VM_METHOD_TYPE_UNDEF) }
|
||||
end
|
||||
|
||||
def C.VM_METHOD_TYPE_ZSUPER
|
||||
Primitive.cexpr! %q{ SIZET2NUM(VM_METHOD_TYPE_ZSUPER) }
|
||||
end
|
||||
C::ARRAY_REDEFINED_OP_FLAG = Primitive.cexpr! %q{ SIZET2NUM(ARRAY_REDEFINED_OP_FLAG) }
|
||||
C::BOP_AND = Primitive.cexpr! %q{ SIZET2NUM(BOP_AND) }
|
||||
C::BOP_AREF = Primitive.cexpr! %q{ SIZET2NUM(BOP_AREF) }
|
||||
C::BOP_EQ = Primitive.cexpr! %q{ SIZET2NUM(BOP_EQ) }
|
||||
C::BOP_FREEZE = Primitive.cexpr! %q{ SIZET2NUM(BOP_FREEZE) }
|
||||
C::BOP_GE = Primitive.cexpr! %q{ SIZET2NUM(BOP_GE) }
|
||||
C::BOP_GT = Primitive.cexpr! %q{ SIZET2NUM(BOP_GT) }
|
||||
C::BOP_LE = Primitive.cexpr! %q{ SIZET2NUM(BOP_LE) }
|
||||
C::BOP_LT = Primitive.cexpr! %q{ SIZET2NUM(BOP_LT) }
|
||||
C::BOP_MINUS = Primitive.cexpr! %q{ SIZET2NUM(BOP_MINUS) }
|
||||
C::BOP_MOD = Primitive.cexpr! %q{ SIZET2NUM(BOP_MOD) }
|
||||
C::BOP_OR = Primitive.cexpr! %q{ SIZET2NUM(BOP_OR) }
|
||||
C::BOP_PLUS = Primitive.cexpr! %q{ SIZET2NUM(BOP_PLUS) }
|
||||
C::HASH_REDEFINED_OP_FLAG = Primitive.cexpr! %q{ SIZET2NUM(HASH_REDEFINED_OP_FLAG) }
|
||||
C::INTEGER_REDEFINED_OP_FLAG = Primitive.cexpr! %q{ SIZET2NUM(INTEGER_REDEFINED_OP_FLAG) }
|
||||
C::INVALID_SHAPE_ID = Primitive.cexpr! %q{ SIZET2NUM(INVALID_SHAPE_ID) }
|
||||
C::METHOD_VISI_PRIVATE = Primitive.cexpr! %q{ SIZET2NUM(METHOD_VISI_PRIVATE) }
|
||||
C::METHOD_VISI_PROTECTED = Primitive.cexpr! %q{ SIZET2NUM(METHOD_VISI_PROTECTED) }
|
||||
C::METHOD_VISI_PUBLIC = Primitive.cexpr! %q{ SIZET2NUM(METHOD_VISI_PUBLIC) }
|
||||
C::OBJ_TOO_COMPLEX_SHAPE_ID = Primitive.cexpr! %q{ SIZET2NUM(OBJ_TOO_COMPLEX_SHAPE_ID) }
|
||||
C::OPTIMIZED_METHOD_TYPE_BLOCK_CALL = Primitive.cexpr! %q{ SIZET2NUM(OPTIMIZED_METHOD_TYPE_BLOCK_CALL) }
|
||||
C::OPTIMIZED_METHOD_TYPE_CALL = Primitive.cexpr! %q{ SIZET2NUM(OPTIMIZED_METHOD_TYPE_CALL) }
|
||||
C::OPTIMIZED_METHOD_TYPE_SEND = Primitive.cexpr! %q{ SIZET2NUM(OPTIMIZED_METHOD_TYPE_SEND) }
|
||||
C::OPTIMIZED_METHOD_TYPE_STRUCT_AREF = Primitive.cexpr! %q{ SIZET2NUM(OPTIMIZED_METHOD_TYPE_STRUCT_AREF) }
|
||||
C::OPTIMIZED_METHOD_TYPE_STRUCT_ASET = Primitive.cexpr! %q{ SIZET2NUM(OPTIMIZED_METHOD_TYPE_STRUCT_ASET) }
|
||||
C::RARRAY_EMBED_FLAG = Primitive.cexpr! %q{ SIZET2NUM(RARRAY_EMBED_FLAG) }
|
||||
C::RARRAY_EMBED_LEN_MASK = Primitive.cexpr! %q{ SIZET2NUM(RARRAY_EMBED_LEN_MASK) }
|
||||
C::RARRAY_EMBED_LEN_SHIFT = Primitive.cexpr! %q{ SIZET2NUM(RARRAY_EMBED_LEN_SHIFT) }
|
||||
C::RMODULE_IS_REFINEMENT = Primitive.cexpr! %q{ SIZET2NUM(RMODULE_IS_REFINEMENT) }
|
||||
C::ROBJECT_EMBED = Primitive.cexpr! %q{ SIZET2NUM(ROBJECT_EMBED) }
|
||||
C::RSTRUCT_EMBED_LEN_MASK = Primitive.cexpr! %q{ SIZET2NUM(RSTRUCT_EMBED_LEN_MASK) }
|
||||
C::RUBY_EVENT_CLASS = Primitive.cexpr! %q{ SIZET2NUM(RUBY_EVENT_CLASS) }
|
||||
C::RUBY_EVENT_C_CALL = Primitive.cexpr! %q{ SIZET2NUM(RUBY_EVENT_C_CALL) }
|
||||
C::RUBY_EVENT_C_RETURN = Primitive.cexpr! %q{ SIZET2NUM(RUBY_EVENT_C_RETURN) }
|
||||
C::RUBY_FIXNUM_FLAG = Primitive.cexpr! %q{ SIZET2NUM(RUBY_FIXNUM_FLAG) }
|
||||
C::RUBY_FLONUM_FLAG = Primitive.cexpr! %q{ SIZET2NUM(RUBY_FLONUM_FLAG) }
|
||||
C::RUBY_FLONUM_MASK = Primitive.cexpr! %q{ SIZET2NUM(RUBY_FLONUM_MASK) }
|
||||
C::RUBY_FL_SINGLETON = Primitive.cexpr! %q{ SIZET2NUM(RUBY_FL_SINGLETON) }
|
||||
C::RUBY_IMMEDIATE_MASK = Primitive.cexpr! %q{ SIZET2NUM(RUBY_IMMEDIATE_MASK) }
|
||||
C::RUBY_SPECIAL_SHIFT = Primitive.cexpr! %q{ SIZET2NUM(RUBY_SPECIAL_SHIFT) }
|
||||
C::RUBY_SYMBOL_FLAG = Primitive.cexpr! %q{ SIZET2NUM(RUBY_SYMBOL_FLAG) }
|
||||
C::RUBY_T_ARRAY = Primitive.cexpr! %q{ SIZET2NUM(RUBY_T_ARRAY) }
|
||||
C::RUBY_T_ICLASS = Primitive.cexpr! %q{ SIZET2NUM(RUBY_T_ICLASS) }
|
||||
C::RUBY_T_MASK = Primitive.cexpr! %q{ SIZET2NUM(RUBY_T_MASK) }
|
||||
C::RUBY_T_MODULE = Primitive.cexpr! %q{ SIZET2NUM(RUBY_T_MODULE) }
|
||||
C::RUBY_T_STRING = Primitive.cexpr! %q{ SIZET2NUM(RUBY_T_STRING) }
|
||||
C::SHAPE_CAPACITY_CHANGE = Primitive.cexpr! %q{ SIZET2NUM(SHAPE_CAPACITY_CHANGE) }
|
||||
C::SHAPE_FLAG_SHIFT = Primitive.cexpr! %q{ SIZET2NUM(SHAPE_FLAG_SHIFT) }
|
||||
C::SHAPE_FROZEN = Primitive.cexpr! %q{ SIZET2NUM(SHAPE_FROZEN) }
|
||||
C::SHAPE_ID_NUM_BITS = Primitive.cexpr! %q{ SIZET2NUM(SHAPE_ID_NUM_BITS) }
|
||||
C::SHAPE_INITIAL_CAPACITY = Primitive.cexpr! %q{ SIZET2NUM(SHAPE_INITIAL_CAPACITY) }
|
||||
C::SHAPE_IVAR = Primitive.cexpr! %q{ SIZET2NUM(SHAPE_IVAR) }
|
||||
C::SHAPE_MASK = Primitive.cexpr! %q{ SIZET2NUM(SHAPE_MASK) }
|
||||
C::SHAPE_ROOT = Primitive.cexpr! %q{ SIZET2NUM(SHAPE_ROOT) }
|
||||
C::STRING_REDEFINED_OP_FLAG = Primitive.cexpr! %q{ SIZET2NUM(STRING_REDEFINED_OP_FLAG) }
|
||||
C::T_OBJECT = Primitive.cexpr! %q{ SIZET2NUM(T_OBJECT) }
|
||||
C::VM_BLOCK_HANDLER_NONE = Primitive.cexpr! %q{ SIZET2NUM(VM_BLOCK_HANDLER_NONE) }
|
||||
C::VM_CALL_ARGS_BLOCKARG = Primitive.cexpr! %q{ SIZET2NUM(VM_CALL_ARGS_BLOCKARG) }
|
||||
C::VM_CALL_ARGS_SPLAT = Primitive.cexpr! %q{ SIZET2NUM(VM_CALL_ARGS_SPLAT) }
|
||||
C::VM_CALL_FCALL = Primitive.cexpr! %q{ SIZET2NUM(VM_CALL_FCALL) }
|
||||
C::VM_CALL_KWARG = Primitive.cexpr! %q{ SIZET2NUM(VM_CALL_KWARG) }
|
||||
C::VM_CALL_KW_SPLAT = Primitive.cexpr! %q{ SIZET2NUM(VM_CALL_KW_SPLAT) }
|
||||
C::VM_CALL_KW_SPLAT_bit = Primitive.cexpr! %q{ SIZET2NUM(VM_CALL_KW_SPLAT_bit) }
|
||||
C::VM_CALL_OPT_SEND = Primitive.cexpr! %q{ SIZET2NUM(VM_CALL_OPT_SEND) }
|
||||
C::VM_CALL_TAILCALL = Primitive.cexpr! %q{ SIZET2NUM(VM_CALL_TAILCALL) }
|
||||
C::VM_CALL_TAILCALL_bit = Primitive.cexpr! %q{ SIZET2NUM(VM_CALL_TAILCALL_bit) }
|
||||
C::VM_ENV_DATA_INDEX_FLAGS = Primitive.cexpr! %q{ SIZET2NUM(VM_ENV_DATA_INDEX_FLAGS) }
|
||||
C::VM_ENV_DATA_SIZE = Primitive.cexpr! %q{ SIZET2NUM(VM_ENV_DATA_SIZE) }
|
||||
C::VM_ENV_FLAG_LOCAL = Primitive.cexpr! %q{ SIZET2NUM(VM_ENV_FLAG_LOCAL) }
|
||||
C::VM_ENV_FLAG_WB_REQUIRED = Primitive.cexpr! %q{ SIZET2NUM(VM_ENV_FLAG_WB_REQUIRED) }
|
||||
C::VM_FRAME_FLAG_BMETHOD = Primitive.cexpr! %q{ SIZET2NUM(VM_FRAME_FLAG_BMETHOD) }
|
||||
C::VM_FRAME_FLAG_CFRAME = Primitive.cexpr! %q{ SIZET2NUM(VM_FRAME_FLAG_CFRAME) }
|
||||
C::VM_FRAME_FLAG_CFRAME_KW = Primitive.cexpr! %q{ SIZET2NUM(VM_FRAME_FLAG_CFRAME_KW) }
|
||||
C::VM_FRAME_FLAG_LAMBDA = Primitive.cexpr! %q{ SIZET2NUM(VM_FRAME_FLAG_LAMBDA) }
|
||||
C::VM_FRAME_FLAG_MODIFIED_BLOCK_PARAM = Primitive.cexpr! %q{ SIZET2NUM(VM_FRAME_FLAG_MODIFIED_BLOCK_PARAM) }
|
||||
C::VM_FRAME_MAGIC_BLOCK = Primitive.cexpr! %q{ SIZET2NUM(VM_FRAME_MAGIC_BLOCK) }
|
||||
C::VM_FRAME_MAGIC_CFUNC = Primitive.cexpr! %q{ SIZET2NUM(VM_FRAME_MAGIC_CFUNC) }
|
||||
C::VM_FRAME_MAGIC_METHOD = Primitive.cexpr! %q{ SIZET2NUM(VM_FRAME_MAGIC_METHOD) }
|
||||
C::VM_METHOD_TYPE_ALIAS = Primitive.cexpr! %q{ SIZET2NUM(VM_METHOD_TYPE_ALIAS) }
|
||||
C::VM_METHOD_TYPE_ATTRSET = Primitive.cexpr! %q{ SIZET2NUM(VM_METHOD_TYPE_ATTRSET) }
|
||||
C::VM_METHOD_TYPE_BMETHOD = Primitive.cexpr! %q{ SIZET2NUM(VM_METHOD_TYPE_BMETHOD) }
|
||||
C::VM_METHOD_TYPE_CFUNC = Primitive.cexpr! %q{ SIZET2NUM(VM_METHOD_TYPE_CFUNC) }
|
||||
C::VM_METHOD_TYPE_ISEQ = Primitive.cexpr! %q{ SIZET2NUM(VM_METHOD_TYPE_ISEQ) }
|
||||
C::VM_METHOD_TYPE_IVAR = Primitive.cexpr! %q{ SIZET2NUM(VM_METHOD_TYPE_IVAR) }
|
||||
C::VM_METHOD_TYPE_MISSING = Primitive.cexpr! %q{ SIZET2NUM(VM_METHOD_TYPE_MISSING) }
|
||||
C::VM_METHOD_TYPE_NOTIMPLEMENTED = Primitive.cexpr! %q{ SIZET2NUM(VM_METHOD_TYPE_NOTIMPLEMENTED) }
|
||||
C::VM_METHOD_TYPE_OPTIMIZED = Primitive.cexpr! %q{ SIZET2NUM(VM_METHOD_TYPE_OPTIMIZED) }
|
||||
C::VM_METHOD_TYPE_REFINED = Primitive.cexpr! %q{ SIZET2NUM(VM_METHOD_TYPE_REFINED) }
|
||||
C::VM_METHOD_TYPE_UNDEF = Primitive.cexpr! %q{ SIZET2NUM(VM_METHOD_TYPE_UNDEF) }
|
||||
C::VM_METHOD_TYPE_ZSUPER = Primitive.cexpr! %q{ SIZET2NUM(VM_METHOD_TYPE_ZSUPER) }
|
||||
|
||||
def C.block_type_iseq
|
||||
Primitive.cexpr! %q{ SIZET2NUM(block_type_iseq) }
|
||||
|
|
|
@ -368,8 +368,6 @@ generator = BindingGenerator.new(
|
|||
VM_ENV_DATA_INDEX_ME_CREF
|
||||
VM_ENV_DATA_INDEX_SPECVAL
|
||||
],
|
||||
},
|
||||
values: {
|
||||
SIZET: %w[
|
||||
ARRAY_REDEFINED_OP_FLAG
|
||||
BOP_AND
|
||||
|
@ -461,6 +459,10 @@ generator = BindingGenerator.new(
|
|||
VM_METHOD_TYPE_REFINED
|
||||
VM_METHOD_TYPE_UNDEF
|
||||
VM_METHOD_TYPE_ZSUPER
|
||||
],
|
||||
},
|
||||
values: {
|
||||
SIZET: %w[
|
||||
block_type_iseq
|
||||
imemo_iseq
|
||||
rb_block_param_proxy
|
||||
|
@ -516,8 +518,8 @@ generator = BindingGenerator.new(
|
|||
IC
|
||||
ID
|
||||
IVC
|
||||
RB_BUILTIN
|
||||
RArray
|
||||
RB_BUILTIN
|
||||
RBasic
|
||||
RObject
|
||||
RStruct
|
||||
|
@ -526,14 +528,16 @@ generator = BindingGenerator.new(
|
|||
iseq_inline_constant_cache_entry
|
||||
iseq_inline_iv_cache_entry
|
||||
iseq_inline_storage_entry
|
||||
rjit_options
|
||||
method_optimized_type
|
||||
rb_block
|
||||
rb_block_type
|
||||
rb_builtin_function
|
||||
rb_call_data
|
||||
rb_callable_method_entry_struct
|
||||
rb_callable_method_entry_t
|
||||
rb_method_entry_t
|
||||
rb_callcache
|
||||
rb_callinfo
|
||||
rb_captured_block
|
||||
rb_control_frame_t
|
||||
rb_cref_t
|
||||
rb_execution_context_struct
|
||||
|
@ -542,24 +546,23 @@ generator = BindingGenerator.new(
|
|||
rb_iseq_location_t
|
||||
rb_iseq_struct
|
||||
rb_iseq_t
|
||||
rb_method_definition_struct
|
||||
rb_method_iseq_t
|
||||
rb_method_type_t
|
||||
rb_method_attr_t
|
||||
rb_method_bmethod_t
|
||||
rb_method_cfunc_t
|
||||
rb_method_definition_struct
|
||||
rb_method_entry_t
|
||||
rb_method_iseq_t
|
||||
rb_method_optimized_t
|
||||
rb_method_type_t
|
||||
rb_proc_t
|
||||
rb_rjit_runtime_counters
|
||||
rb_serial_t
|
||||
rb_shape
|
||||
rb_shape_t
|
||||
rb_method_attr_t
|
||||
rb_method_cfunc_t
|
||||
rb_method_optimized_t
|
||||
method_optimized_type
|
||||
rb_thread_struct
|
||||
rb_proc_t
|
||||
rb_block
|
||||
rb_block_type
|
||||
rb_captured_block
|
||||
rjit_options
|
||||
],
|
||||
# #ifdef-dependent immediate types, which need Primitive.cexpr! for type detection
|
||||
dynamic_types: %w[
|
||||
VALUE
|
||||
shape_id_t
|
||||
|
|
Загрузка…
Ссылка в новой задаче