Add defined_ivar as YJIT instruction as well
This works much like the existing `defined` implementation, but calls out to rb_ivar_defined instead of the more general rb_vm_defined. Other difference to the existing `defined` implementation is that this new instruction has to take the same operands as the CRuby `defined_ivar` instruction.
This commit is contained in:
parent
1a3f8e1c9f
commit
4667a3a665
Notes:
git
2023-03-08 17:34:51 +00:00
@ -346,6 +346,7 @@ fn main() {
|
||||
|
||||
// From include/ruby/internal/intern/variable.h
|
||||
.allowlist_function("rb_attr_get")
|
||||
.allowlist_function("rb_ivar_defined")
|
||||
.allowlist_function("rb_ivar_get")
|
||||
|
||||
// From include/ruby/internal/intern/vm.h
|
||||
|
@ -2389,6 +2389,43 @@ fn gen_defined(
|
||||
KeepCompiling
|
||||
}
|
||||
|
||||
fn gen_defined_ivar(
|
||||
jit: &mut JITState,
|
||||
ctx: &mut Context,
|
||||
asm: &mut Assembler,
|
||||
_ocb: &mut OutlinedCb,
|
||||
) -> CodegenStatus {
|
||||
let ivar_name = jit.get_arg(0).as_u64();
|
||||
let pushval = jit.get_arg(2);
|
||||
|
||||
// Get the receiver
|
||||
let recv = asm.load(Opnd::mem(64, CFP, RUBY_OFFSET_CFP_SELF));
|
||||
|
||||
// Save the PC and SP because the callee may allocate
|
||||
// Note that this modifies REG_SP, which is why we do it first
|
||||
jit_prepare_routine_call(jit, ctx, asm);
|
||||
|
||||
// Call rb_ivar_defined(recv, ivar_name)
|
||||
let def_result = asm.ccall(rb_ivar_defined as *const u8, vec![recv.into(), ivar_name.into()]);
|
||||
|
||||
// if (rb_ivar_defined(recv, ivar_name)) {
|
||||
// val = pushval;
|
||||
// }
|
||||
asm.test(def_result, Opnd::UImm(255));
|
||||
let out_value = asm.csel_nz(pushval.into(), Qnil.into());
|
||||
|
||||
// Push the return value onto the stack
|
||||
let out_type = if pushval.special_const_p() {
|
||||
Type::UnknownImm
|
||||
} else {
|
||||
Type::Unknown
|
||||
};
|
||||
let stack_ret = ctx.stack_push(out_type);
|
||||
asm.mov(stack_ret, out_value);
|
||||
|
||||
KeepCompiling
|
||||
}
|
||||
|
||||
fn gen_checktype(
|
||||
jit: &mut JITState,
|
||||
ctx: &mut Context,
|
||||
@ -7635,6 +7672,7 @@ fn get_gen_fn(opcode: VALUE) -> Option<InsnGenFn> {
|
||||
YARVINSN_putstring => Some(gen_putstring),
|
||||
YARVINSN_expandarray => Some(gen_expandarray),
|
||||
YARVINSN_defined => Some(gen_defined),
|
||||
YARVINSN_defined_ivar => Some(gen_defined_ivar),
|
||||
YARVINSN_checkkeyword => Some(gen_checkkeyword),
|
||||
YARVINSN_concatstrings => Some(gen_concatstrings),
|
||||
YARVINSN_getinstancevariable => Some(gen_getinstancevariable),
|
||||
|
@ -893,165 +893,167 @@ pub const YARVINSN_topn: ruby_vminsn_type = 40;
|
||||
pub const YARVINSN_setn: ruby_vminsn_type = 41;
|
||||
pub const YARVINSN_adjuststack: ruby_vminsn_type = 42;
|
||||
pub const YARVINSN_defined: ruby_vminsn_type = 43;
|
||||
pub const YARVINSN_checkmatch: ruby_vminsn_type = 44;
|
||||
pub const YARVINSN_checkkeyword: ruby_vminsn_type = 45;
|
||||
pub const YARVINSN_checktype: ruby_vminsn_type = 46;
|
||||
pub const YARVINSN_defineclass: ruby_vminsn_type = 47;
|
||||
pub const YARVINSN_definemethod: ruby_vminsn_type = 48;
|
||||
pub const YARVINSN_definesmethod: ruby_vminsn_type = 49;
|
||||
pub const YARVINSN_send: ruby_vminsn_type = 50;
|
||||
pub const YARVINSN_opt_send_without_block: ruby_vminsn_type = 51;
|
||||
pub const YARVINSN_objtostring: ruby_vminsn_type = 52;
|
||||
pub const YARVINSN_opt_str_freeze: ruby_vminsn_type = 53;
|
||||
pub const YARVINSN_opt_nil_p: ruby_vminsn_type = 54;
|
||||
pub const YARVINSN_opt_str_uminus: ruby_vminsn_type = 55;
|
||||
pub const YARVINSN_opt_newarray_max: ruby_vminsn_type = 56;
|
||||
pub const YARVINSN_opt_newarray_min: ruby_vminsn_type = 57;
|
||||
pub const YARVINSN_invokesuper: ruby_vminsn_type = 58;
|
||||
pub const YARVINSN_invokeblock: ruby_vminsn_type = 59;
|
||||
pub const YARVINSN_leave: ruby_vminsn_type = 60;
|
||||
pub const YARVINSN_throw: ruby_vminsn_type = 61;
|
||||
pub const YARVINSN_jump: ruby_vminsn_type = 62;
|
||||
pub const YARVINSN_branchif: ruby_vminsn_type = 63;
|
||||
pub const YARVINSN_branchunless: ruby_vminsn_type = 64;
|
||||
pub const YARVINSN_branchnil: ruby_vminsn_type = 65;
|
||||
pub const YARVINSN_once: ruby_vminsn_type = 66;
|
||||
pub const YARVINSN_opt_case_dispatch: ruby_vminsn_type = 67;
|
||||
pub const YARVINSN_opt_plus: ruby_vminsn_type = 68;
|
||||
pub const YARVINSN_opt_minus: ruby_vminsn_type = 69;
|
||||
pub const YARVINSN_opt_mult: ruby_vminsn_type = 70;
|
||||
pub const YARVINSN_opt_div: ruby_vminsn_type = 71;
|
||||
pub const YARVINSN_opt_mod: ruby_vminsn_type = 72;
|
||||
pub const YARVINSN_opt_eq: ruby_vminsn_type = 73;
|
||||
pub const YARVINSN_opt_neq: ruby_vminsn_type = 74;
|
||||
pub const YARVINSN_opt_lt: ruby_vminsn_type = 75;
|
||||
pub const YARVINSN_opt_le: ruby_vminsn_type = 76;
|
||||
pub const YARVINSN_opt_gt: ruby_vminsn_type = 77;
|
||||
pub const YARVINSN_opt_ge: ruby_vminsn_type = 78;
|
||||
pub const YARVINSN_opt_ltlt: ruby_vminsn_type = 79;
|
||||
pub const YARVINSN_opt_and: ruby_vminsn_type = 80;
|
||||
pub const YARVINSN_opt_or: ruby_vminsn_type = 81;
|
||||
pub const YARVINSN_opt_aref: ruby_vminsn_type = 82;
|
||||
pub const YARVINSN_opt_aset: ruby_vminsn_type = 83;
|
||||
pub const YARVINSN_opt_aset_with: ruby_vminsn_type = 84;
|
||||
pub const YARVINSN_opt_aref_with: ruby_vminsn_type = 85;
|
||||
pub const YARVINSN_opt_length: ruby_vminsn_type = 86;
|
||||
pub const YARVINSN_opt_size: ruby_vminsn_type = 87;
|
||||
pub const YARVINSN_opt_empty_p: ruby_vminsn_type = 88;
|
||||
pub const YARVINSN_opt_succ: ruby_vminsn_type = 89;
|
||||
pub const YARVINSN_opt_not: ruby_vminsn_type = 90;
|
||||
pub const YARVINSN_opt_regexpmatch2: ruby_vminsn_type = 91;
|
||||
pub const YARVINSN_invokebuiltin: ruby_vminsn_type = 92;
|
||||
pub const YARVINSN_opt_invokebuiltin_delegate: ruby_vminsn_type = 93;
|
||||
pub const YARVINSN_opt_invokebuiltin_delegate_leave: ruby_vminsn_type = 94;
|
||||
pub const YARVINSN_getlocal_WC_0: ruby_vminsn_type = 95;
|
||||
pub const YARVINSN_getlocal_WC_1: ruby_vminsn_type = 96;
|
||||
pub const YARVINSN_setlocal_WC_0: ruby_vminsn_type = 97;
|
||||
pub const YARVINSN_setlocal_WC_1: ruby_vminsn_type = 98;
|
||||
pub const YARVINSN_putobject_INT2FIX_0_: ruby_vminsn_type = 99;
|
||||
pub const YARVINSN_putobject_INT2FIX_1_: ruby_vminsn_type = 100;
|
||||
pub const YARVINSN_trace_nop: ruby_vminsn_type = 101;
|
||||
pub const YARVINSN_trace_getlocal: ruby_vminsn_type = 102;
|
||||
pub const YARVINSN_trace_setlocal: ruby_vminsn_type = 103;
|
||||
pub const YARVINSN_trace_getblockparam: ruby_vminsn_type = 104;
|
||||
pub const YARVINSN_trace_setblockparam: ruby_vminsn_type = 105;
|
||||
pub const YARVINSN_trace_getblockparamproxy: ruby_vminsn_type = 106;
|
||||
pub const YARVINSN_trace_getspecial: ruby_vminsn_type = 107;
|
||||
pub const YARVINSN_trace_setspecial: ruby_vminsn_type = 108;
|
||||
pub const YARVINSN_trace_getinstancevariable: ruby_vminsn_type = 109;
|
||||
pub const YARVINSN_trace_setinstancevariable: ruby_vminsn_type = 110;
|
||||
pub const YARVINSN_trace_getclassvariable: ruby_vminsn_type = 111;
|
||||
pub const YARVINSN_trace_setclassvariable: ruby_vminsn_type = 112;
|
||||
pub const YARVINSN_trace_opt_getconstant_path: ruby_vminsn_type = 113;
|
||||
pub const YARVINSN_trace_getconstant: ruby_vminsn_type = 114;
|
||||
pub const YARVINSN_trace_setconstant: ruby_vminsn_type = 115;
|
||||
pub const YARVINSN_trace_getglobal: ruby_vminsn_type = 116;
|
||||
pub const YARVINSN_trace_setglobal: ruby_vminsn_type = 117;
|
||||
pub const YARVINSN_trace_putnil: ruby_vminsn_type = 118;
|
||||
pub const YARVINSN_trace_putself: ruby_vminsn_type = 119;
|
||||
pub const YARVINSN_trace_putobject: ruby_vminsn_type = 120;
|
||||
pub const YARVINSN_trace_putspecialobject: ruby_vminsn_type = 121;
|
||||
pub const YARVINSN_trace_putstring: ruby_vminsn_type = 122;
|
||||
pub const YARVINSN_trace_concatstrings: ruby_vminsn_type = 123;
|
||||
pub const YARVINSN_trace_anytostring: ruby_vminsn_type = 124;
|
||||
pub const YARVINSN_trace_toregexp: ruby_vminsn_type = 125;
|
||||
pub const YARVINSN_trace_intern: ruby_vminsn_type = 126;
|
||||
pub const YARVINSN_trace_newarray: ruby_vminsn_type = 127;
|
||||
pub const YARVINSN_trace_newarraykwsplat: ruby_vminsn_type = 128;
|
||||
pub const YARVINSN_trace_duparray: ruby_vminsn_type = 129;
|
||||
pub const YARVINSN_trace_duphash: ruby_vminsn_type = 130;
|
||||
pub const YARVINSN_trace_expandarray: ruby_vminsn_type = 131;
|
||||
pub const YARVINSN_trace_concatarray: ruby_vminsn_type = 132;
|
||||
pub const YARVINSN_trace_splatarray: ruby_vminsn_type = 133;
|
||||
pub const YARVINSN_trace_newhash: ruby_vminsn_type = 134;
|
||||
pub const YARVINSN_trace_newrange: ruby_vminsn_type = 135;
|
||||
pub const YARVINSN_trace_pop: ruby_vminsn_type = 136;
|
||||
pub const YARVINSN_trace_dup: ruby_vminsn_type = 137;
|
||||
pub const YARVINSN_trace_dupn: ruby_vminsn_type = 138;
|
||||
pub const YARVINSN_trace_swap: ruby_vminsn_type = 139;
|
||||
pub const YARVINSN_trace_opt_reverse: ruby_vminsn_type = 140;
|
||||
pub const YARVINSN_trace_topn: ruby_vminsn_type = 141;
|
||||
pub const YARVINSN_trace_setn: ruby_vminsn_type = 142;
|
||||
pub const YARVINSN_trace_adjuststack: ruby_vminsn_type = 143;
|
||||
pub const YARVINSN_trace_defined: ruby_vminsn_type = 144;
|
||||
pub const YARVINSN_trace_checkmatch: ruby_vminsn_type = 145;
|
||||
pub const YARVINSN_trace_checkkeyword: ruby_vminsn_type = 146;
|
||||
pub const YARVINSN_trace_checktype: ruby_vminsn_type = 147;
|
||||
pub const YARVINSN_trace_defineclass: ruby_vminsn_type = 148;
|
||||
pub const YARVINSN_trace_definemethod: ruby_vminsn_type = 149;
|
||||
pub const YARVINSN_trace_definesmethod: ruby_vminsn_type = 150;
|
||||
pub const YARVINSN_trace_send: ruby_vminsn_type = 151;
|
||||
pub const YARVINSN_trace_opt_send_without_block: ruby_vminsn_type = 152;
|
||||
pub const YARVINSN_trace_objtostring: ruby_vminsn_type = 153;
|
||||
pub const YARVINSN_trace_opt_str_freeze: ruby_vminsn_type = 154;
|
||||
pub const YARVINSN_trace_opt_nil_p: ruby_vminsn_type = 155;
|
||||
pub const YARVINSN_trace_opt_str_uminus: ruby_vminsn_type = 156;
|
||||
pub const YARVINSN_trace_opt_newarray_max: ruby_vminsn_type = 157;
|
||||
pub const YARVINSN_trace_opt_newarray_min: ruby_vminsn_type = 158;
|
||||
pub const YARVINSN_trace_invokesuper: ruby_vminsn_type = 159;
|
||||
pub const YARVINSN_trace_invokeblock: ruby_vminsn_type = 160;
|
||||
pub const YARVINSN_trace_leave: ruby_vminsn_type = 161;
|
||||
pub const YARVINSN_trace_throw: ruby_vminsn_type = 162;
|
||||
pub const YARVINSN_trace_jump: ruby_vminsn_type = 163;
|
||||
pub const YARVINSN_trace_branchif: ruby_vminsn_type = 164;
|
||||
pub const YARVINSN_trace_branchunless: ruby_vminsn_type = 165;
|
||||
pub const YARVINSN_trace_branchnil: ruby_vminsn_type = 166;
|
||||
pub const YARVINSN_trace_once: ruby_vminsn_type = 167;
|
||||
pub const YARVINSN_trace_opt_case_dispatch: ruby_vminsn_type = 168;
|
||||
pub const YARVINSN_trace_opt_plus: ruby_vminsn_type = 169;
|
||||
pub const YARVINSN_trace_opt_minus: ruby_vminsn_type = 170;
|
||||
pub const YARVINSN_trace_opt_mult: ruby_vminsn_type = 171;
|
||||
pub const YARVINSN_trace_opt_div: ruby_vminsn_type = 172;
|
||||
pub const YARVINSN_trace_opt_mod: ruby_vminsn_type = 173;
|
||||
pub const YARVINSN_trace_opt_eq: ruby_vminsn_type = 174;
|
||||
pub const YARVINSN_trace_opt_neq: ruby_vminsn_type = 175;
|
||||
pub const YARVINSN_trace_opt_lt: ruby_vminsn_type = 176;
|
||||
pub const YARVINSN_trace_opt_le: ruby_vminsn_type = 177;
|
||||
pub const YARVINSN_trace_opt_gt: ruby_vminsn_type = 178;
|
||||
pub const YARVINSN_trace_opt_ge: ruby_vminsn_type = 179;
|
||||
pub const YARVINSN_trace_opt_ltlt: ruby_vminsn_type = 180;
|
||||
pub const YARVINSN_trace_opt_and: ruby_vminsn_type = 181;
|
||||
pub const YARVINSN_trace_opt_or: ruby_vminsn_type = 182;
|
||||
pub const YARVINSN_trace_opt_aref: ruby_vminsn_type = 183;
|
||||
pub const YARVINSN_trace_opt_aset: ruby_vminsn_type = 184;
|
||||
pub const YARVINSN_trace_opt_aset_with: ruby_vminsn_type = 185;
|
||||
pub const YARVINSN_trace_opt_aref_with: ruby_vminsn_type = 186;
|
||||
pub const YARVINSN_trace_opt_length: ruby_vminsn_type = 187;
|
||||
pub const YARVINSN_trace_opt_size: ruby_vminsn_type = 188;
|
||||
pub const YARVINSN_trace_opt_empty_p: ruby_vminsn_type = 189;
|
||||
pub const YARVINSN_trace_opt_succ: ruby_vminsn_type = 190;
|
||||
pub const YARVINSN_trace_opt_not: ruby_vminsn_type = 191;
|
||||
pub const YARVINSN_trace_opt_regexpmatch2: ruby_vminsn_type = 192;
|
||||
pub const YARVINSN_trace_invokebuiltin: ruby_vminsn_type = 193;
|
||||
pub const YARVINSN_trace_opt_invokebuiltin_delegate: ruby_vminsn_type = 194;
|
||||
pub const YARVINSN_trace_opt_invokebuiltin_delegate_leave: ruby_vminsn_type = 195;
|
||||
pub const YARVINSN_trace_getlocal_WC_0: ruby_vminsn_type = 196;
|
||||
pub const YARVINSN_trace_getlocal_WC_1: ruby_vminsn_type = 197;
|
||||
pub const YARVINSN_trace_setlocal_WC_0: ruby_vminsn_type = 198;
|
||||
pub const YARVINSN_trace_setlocal_WC_1: ruby_vminsn_type = 199;
|
||||
pub const YARVINSN_trace_putobject_INT2FIX_0_: ruby_vminsn_type = 200;
|
||||
pub const YARVINSN_trace_putobject_INT2FIX_1_: ruby_vminsn_type = 201;
|
||||
pub const VM_INSTRUCTION_SIZE: ruby_vminsn_type = 202;
|
||||
pub const YARVINSN_defined_ivar: ruby_vminsn_type = 44;
|
||||
pub const YARVINSN_checkmatch: ruby_vminsn_type = 45;
|
||||
pub const YARVINSN_checkkeyword: ruby_vminsn_type = 46;
|
||||
pub const YARVINSN_checktype: ruby_vminsn_type = 47;
|
||||
pub const YARVINSN_defineclass: ruby_vminsn_type = 48;
|
||||
pub const YARVINSN_definemethod: ruby_vminsn_type = 49;
|
||||
pub const YARVINSN_definesmethod: ruby_vminsn_type = 50;
|
||||
pub const YARVINSN_send: ruby_vminsn_type = 51;
|
||||
pub const YARVINSN_opt_send_without_block: ruby_vminsn_type = 52;
|
||||
pub const YARVINSN_objtostring: ruby_vminsn_type = 53;
|
||||
pub const YARVINSN_opt_str_freeze: ruby_vminsn_type = 54;
|
||||
pub const YARVINSN_opt_nil_p: ruby_vminsn_type = 55;
|
||||
pub const YARVINSN_opt_str_uminus: ruby_vminsn_type = 56;
|
||||
pub const YARVINSN_opt_newarray_max: ruby_vminsn_type = 57;
|
||||
pub const YARVINSN_opt_newarray_min: ruby_vminsn_type = 58;
|
||||
pub const YARVINSN_invokesuper: ruby_vminsn_type = 59;
|
||||
pub const YARVINSN_invokeblock: ruby_vminsn_type = 60;
|
||||
pub const YARVINSN_leave: ruby_vminsn_type = 61;
|
||||
pub const YARVINSN_throw: ruby_vminsn_type = 62;
|
||||
pub const YARVINSN_jump: ruby_vminsn_type = 63;
|
||||
pub const YARVINSN_branchif: ruby_vminsn_type = 64;
|
||||
pub const YARVINSN_branchunless: ruby_vminsn_type = 65;
|
||||
pub const YARVINSN_branchnil: ruby_vminsn_type = 66;
|
||||
pub const YARVINSN_once: ruby_vminsn_type = 67;
|
||||
pub const YARVINSN_opt_case_dispatch: ruby_vminsn_type = 68;
|
||||
pub const YARVINSN_opt_plus: ruby_vminsn_type = 69;
|
||||
pub const YARVINSN_opt_minus: ruby_vminsn_type = 70;
|
||||
pub const YARVINSN_opt_mult: ruby_vminsn_type = 71;
|
||||
pub const YARVINSN_opt_div: ruby_vminsn_type = 72;
|
||||
pub const YARVINSN_opt_mod: ruby_vminsn_type = 73;
|
||||
pub const YARVINSN_opt_eq: ruby_vminsn_type = 74;
|
||||
pub const YARVINSN_opt_neq: ruby_vminsn_type = 75;
|
||||
pub const YARVINSN_opt_lt: ruby_vminsn_type = 76;
|
||||
pub const YARVINSN_opt_le: ruby_vminsn_type = 77;
|
||||
pub const YARVINSN_opt_gt: ruby_vminsn_type = 78;
|
||||
pub const YARVINSN_opt_ge: ruby_vminsn_type = 79;
|
||||
pub const YARVINSN_opt_ltlt: ruby_vminsn_type = 80;
|
||||
pub const YARVINSN_opt_and: ruby_vminsn_type = 81;
|
||||
pub const YARVINSN_opt_or: ruby_vminsn_type = 82;
|
||||
pub const YARVINSN_opt_aref: ruby_vminsn_type = 83;
|
||||
pub const YARVINSN_opt_aset: ruby_vminsn_type = 84;
|
||||
pub const YARVINSN_opt_aset_with: ruby_vminsn_type = 85;
|
||||
pub const YARVINSN_opt_aref_with: ruby_vminsn_type = 86;
|
||||
pub const YARVINSN_opt_length: ruby_vminsn_type = 87;
|
||||
pub const YARVINSN_opt_size: ruby_vminsn_type = 88;
|
||||
pub const YARVINSN_opt_empty_p: ruby_vminsn_type = 89;
|
||||
pub const YARVINSN_opt_succ: ruby_vminsn_type = 90;
|
||||
pub const YARVINSN_opt_not: ruby_vminsn_type = 91;
|
||||
pub const YARVINSN_opt_regexpmatch2: ruby_vminsn_type = 92;
|
||||
pub const YARVINSN_invokebuiltin: ruby_vminsn_type = 93;
|
||||
pub const YARVINSN_opt_invokebuiltin_delegate: ruby_vminsn_type = 94;
|
||||
pub const YARVINSN_opt_invokebuiltin_delegate_leave: ruby_vminsn_type = 95;
|
||||
pub const YARVINSN_getlocal_WC_0: ruby_vminsn_type = 96;
|
||||
pub const YARVINSN_getlocal_WC_1: ruby_vminsn_type = 97;
|
||||
pub const YARVINSN_setlocal_WC_0: ruby_vminsn_type = 98;
|
||||
pub const YARVINSN_setlocal_WC_1: ruby_vminsn_type = 99;
|
||||
pub const YARVINSN_putobject_INT2FIX_0_: ruby_vminsn_type = 100;
|
||||
pub const YARVINSN_putobject_INT2FIX_1_: ruby_vminsn_type = 101;
|
||||
pub const YARVINSN_trace_nop: ruby_vminsn_type = 102;
|
||||
pub const YARVINSN_trace_getlocal: ruby_vminsn_type = 103;
|
||||
pub const YARVINSN_trace_setlocal: ruby_vminsn_type = 104;
|
||||
pub const YARVINSN_trace_getblockparam: ruby_vminsn_type = 105;
|
||||
pub const YARVINSN_trace_setblockparam: ruby_vminsn_type = 106;
|
||||
pub const YARVINSN_trace_getblockparamproxy: ruby_vminsn_type = 107;
|
||||
pub const YARVINSN_trace_getspecial: ruby_vminsn_type = 108;
|
||||
pub const YARVINSN_trace_setspecial: ruby_vminsn_type = 109;
|
||||
pub const YARVINSN_trace_getinstancevariable: ruby_vminsn_type = 110;
|
||||
pub const YARVINSN_trace_setinstancevariable: ruby_vminsn_type = 111;
|
||||
pub const YARVINSN_trace_getclassvariable: ruby_vminsn_type = 112;
|
||||
pub const YARVINSN_trace_setclassvariable: ruby_vminsn_type = 113;
|
||||
pub const YARVINSN_trace_opt_getconstant_path: ruby_vminsn_type = 114;
|
||||
pub const YARVINSN_trace_getconstant: ruby_vminsn_type = 115;
|
||||
pub const YARVINSN_trace_setconstant: ruby_vminsn_type = 116;
|
||||
pub const YARVINSN_trace_getglobal: ruby_vminsn_type = 117;
|
||||
pub const YARVINSN_trace_setglobal: ruby_vminsn_type = 118;
|
||||
pub const YARVINSN_trace_putnil: ruby_vminsn_type = 119;
|
||||
pub const YARVINSN_trace_putself: ruby_vminsn_type = 120;
|
||||
pub const YARVINSN_trace_putobject: ruby_vminsn_type = 121;
|
||||
pub const YARVINSN_trace_putspecialobject: ruby_vminsn_type = 122;
|
||||
pub const YARVINSN_trace_putstring: ruby_vminsn_type = 123;
|
||||
pub const YARVINSN_trace_concatstrings: ruby_vminsn_type = 124;
|
||||
pub const YARVINSN_trace_anytostring: ruby_vminsn_type = 125;
|
||||
pub const YARVINSN_trace_toregexp: ruby_vminsn_type = 126;
|
||||
pub const YARVINSN_trace_intern: ruby_vminsn_type = 127;
|
||||
pub const YARVINSN_trace_newarray: ruby_vminsn_type = 128;
|
||||
pub const YARVINSN_trace_newarraykwsplat: ruby_vminsn_type = 129;
|
||||
pub const YARVINSN_trace_duparray: ruby_vminsn_type = 130;
|
||||
pub const YARVINSN_trace_duphash: ruby_vminsn_type = 131;
|
||||
pub const YARVINSN_trace_expandarray: ruby_vminsn_type = 132;
|
||||
pub const YARVINSN_trace_concatarray: ruby_vminsn_type = 133;
|
||||
pub const YARVINSN_trace_splatarray: ruby_vminsn_type = 134;
|
||||
pub const YARVINSN_trace_newhash: ruby_vminsn_type = 135;
|
||||
pub const YARVINSN_trace_newrange: ruby_vminsn_type = 136;
|
||||
pub const YARVINSN_trace_pop: ruby_vminsn_type = 137;
|
||||
pub const YARVINSN_trace_dup: ruby_vminsn_type = 138;
|
||||
pub const YARVINSN_trace_dupn: ruby_vminsn_type = 139;
|
||||
pub const YARVINSN_trace_swap: ruby_vminsn_type = 140;
|
||||
pub const YARVINSN_trace_opt_reverse: ruby_vminsn_type = 141;
|
||||
pub const YARVINSN_trace_topn: ruby_vminsn_type = 142;
|
||||
pub const YARVINSN_trace_setn: ruby_vminsn_type = 143;
|
||||
pub const YARVINSN_trace_adjuststack: ruby_vminsn_type = 144;
|
||||
pub const YARVINSN_trace_defined: ruby_vminsn_type = 145;
|
||||
pub const YARVINSN_trace_defined_ivar: ruby_vminsn_type = 146;
|
||||
pub const YARVINSN_trace_checkmatch: ruby_vminsn_type = 147;
|
||||
pub const YARVINSN_trace_checkkeyword: ruby_vminsn_type = 148;
|
||||
pub const YARVINSN_trace_checktype: ruby_vminsn_type = 149;
|
||||
pub const YARVINSN_trace_defineclass: ruby_vminsn_type = 150;
|
||||
pub const YARVINSN_trace_definemethod: ruby_vminsn_type = 151;
|
||||
pub const YARVINSN_trace_definesmethod: ruby_vminsn_type = 152;
|
||||
pub const YARVINSN_trace_send: ruby_vminsn_type = 153;
|
||||
pub const YARVINSN_trace_opt_send_without_block: ruby_vminsn_type = 154;
|
||||
pub const YARVINSN_trace_objtostring: ruby_vminsn_type = 155;
|
||||
pub const YARVINSN_trace_opt_str_freeze: ruby_vminsn_type = 156;
|
||||
pub const YARVINSN_trace_opt_nil_p: ruby_vminsn_type = 157;
|
||||
pub const YARVINSN_trace_opt_str_uminus: ruby_vminsn_type = 158;
|
||||
pub const YARVINSN_trace_opt_newarray_max: ruby_vminsn_type = 159;
|
||||
pub const YARVINSN_trace_opt_newarray_min: ruby_vminsn_type = 160;
|
||||
pub const YARVINSN_trace_invokesuper: ruby_vminsn_type = 161;
|
||||
pub const YARVINSN_trace_invokeblock: ruby_vminsn_type = 162;
|
||||
pub const YARVINSN_trace_leave: ruby_vminsn_type = 163;
|
||||
pub const YARVINSN_trace_throw: ruby_vminsn_type = 164;
|
||||
pub const YARVINSN_trace_jump: ruby_vminsn_type = 165;
|
||||
pub const YARVINSN_trace_branchif: ruby_vminsn_type = 166;
|
||||
pub const YARVINSN_trace_branchunless: ruby_vminsn_type = 167;
|
||||
pub const YARVINSN_trace_branchnil: ruby_vminsn_type = 168;
|
||||
pub const YARVINSN_trace_once: ruby_vminsn_type = 169;
|
||||
pub const YARVINSN_trace_opt_case_dispatch: ruby_vminsn_type = 170;
|
||||
pub const YARVINSN_trace_opt_plus: ruby_vminsn_type = 171;
|
||||
pub const YARVINSN_trace_opt_minus: ruby_vminsn_type = 172;
|
||||
pub const YARVINSN_trace_opt_mult: ruby_vminsn_type = 173;
|
||||
pub const YARVINSN_trace_opt_div: ruby_vminsn_type = 174;
|
||||
pub const YARVINSN_trace_opt_mod: ruby_vminsn_type = 175;
|
||||
pub const YARVINSN_trace_opt_eq: ruby_vminsn_type = 176;
|
||||
pub const YARVINSN_trace_opt_neq: ruby_vminsn_type = 177;
|
||||
pub const YARVINSN_trace_opt_lt: ruby_vminsn_type = 178;
|
||||
pub const YARVINSN_trace_opt_le: ruby_vminsn_type = 179;
|
||||
pub const YARVINSN_trace_opt_gt: ruby_vminsn_type = 180;
|
||||
pub const YARVINSN_trace_opt_ge: ruby_vminsn_type = 181;
|
||||
pub const YARVINSN_trace_opt_ltlt: ruby_vminsn_type = 182;
|
||||
pub const YARVINSN_trace_opt_and: ruby_vminsn_type = 183;
|
||||
pub const YARVINSN_trace_opt_or: ruby_vminsn_type = 184;
|
||||
pub const YARVINSN_trace_opt_aref: ruby_vminsn_type = 185;
|
||||
pub const YARVINSN_trace_opt_aset: ruby_vminsn_type = 186;
|
||||
pub const YARVINSN_trace_opt_aset_with: ruby_vminsn_type = 187;
|
||||
pub const YARVINSN_trace_opt_aref_with: ruby_vminsn_type = 188;
|
||||
pub const YARVINSN_trace_opt_length: ruby_vminsn_type = 189;
|
||||
pub const YARVINSN_trace_opt_size: ruby_vminsn_type = 190;
|
||||
pub const YARVINSN_trace_opt_empty_p: ruby_vminsn_type = 191;
|
||||
pub const YARVINSN_trace_opt_succ: ruby_vminsn_type = 192;
|
||||
pub const YARVINSN_trace_opt_not: ruby_vminsn_type = 193;
|
||||
pub const YARVINSN_trace_opt_regexpmatch2: ruby_vminsn_type = 194;
|
||||
pub const YARVINSN_trace_invokebuiltin: ruby_vminsn_type = 195;
|
||||
pub const YARVINSN_trace_opt_invokebuiltin_delegate: ruby_vminsn_type = 196;
|
||||
pub const YARVINSN_trace_opt_invokebuiltin_delegate_leave: ruby_vminsn_type = 197;
|
||||
pub const YARVINSN_trace_getlocal_WC_0: ruby_vminsn_type = 198;
|
||||
pub const YARVINSN_trace_getlocal_WC_1: ruby_vminsn_type = 199;
|
||||
pub const YARVINSN_trace_setlocal_WC_0: ruby_vminsn_type = 200;
|
||||
pub const YARVINSN_trace_setlocal_WC_1: ruby_vminsn_type = 201;
|
||||
pub const YARVINSN_trace_putobject_INT2FIX_0_: ruby_vminsn_type = 202;
|
||||
pub const YARVINSN_trace_putobject_INT2FIX_1_: ruby_vminsn_type = 203;
|
||||
pub const VM_INSTRUCTION_SIZE: ruby_vminsn_type = 204;
|
||||
pub type ruby_vminsn_type = u32;
|
||||
pub type rb_iseq_callback = ::std::option::Option<
|
||||
unsafe extern "C" fn(arg1: *const rb_iseq_t, arg2: *mut ::std::os::raw::c_void),
|
||||
@ -1116,6 +1118,7 @@ extern "C" {
|
||||
pub fn rb_str_dup(str_: VALUE) -> VALUE;
|
||||
pub fn rb_str_intern(str_: VALUE) -> VALUE;
|
||||
pub fn rb_ivar_get(obj: VALUE, name: ID) -> VALUE;
|
||||
pub fn rb_ivar_defined(obj: VALUE, name: ID) -> VALUE;
|
||||
pub fn rb_attr_get(obj: VALUE, name: ID) -> VALUE;
|
||||
pub fn rb_obj_info_dump(obj: VALUE);
|
||||
pub fn rb_reg_new_ary(ary: VALUE, options: ::std::os::raw::c_int) -> VALUE;
|
||||
|
Loading…
x
Reference in New Issue
Block a user