зеркало из https://github.com/github/ruby.git
Ensure f(**kw, &block) calls kw.to_hash before block.to_proc
Previously, block.to_proc was called first, by vm_caller_setup_arg_block. kw.to_hash was called later inside CALLER_SETUP_ARG or setup_parameters_complex. This adds a splatkw instruction that is inserted before sends with ARGS_BLOCKARG and KW_SPLAT and without KW_SPLAT_MUT. This is not needed in the KW_SPLAT_MUT case, because then you know the value is a hash, and you don't need to call to_hash on it. The splatkw instruction checks whether the second to top block is a hash, and if not, replaces it with the value of calling to_hash on it (using rb_to_hash_type). As it is always before a send with ARGS_BLOCKARG and KW_SPLAT, second to top is the keyword splat, and top is the passed block.
This commit is contained in:
Родитель
c0b6ea7c8b
Коммит
a950f23078
|
@ -8827,6 +8827,9 @@ compile_call(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, co
|
|||
flag |= VM_CALL_FCALL;
|
||||
}
|
||||
|
||||
if ((flag & VM_CALL_ARGS_BLOCKARG) && (flag & VM_CALL_KW_SPLAT) && !(flag & VM_CALL_KW_SPLAT_MUT)) {
|
||||
ADD_INSN(ret, line_node, splatkw);
|
||||
}
|
||||
ADD_SEND_R(ret, line_node, mid, argc, parent_block, INT2FIX(flag), keywords);
|
||||
|
||||
qcall_branch_end(iseq, ret, else_label, branches, node, line_node);
|
||||
|
|
11
insns.def
11
insns.def
|
@ -527,6 +527,17 @@ splatarray
|
|||
obj = vm_splat_array(flag, ary);
|
||||
}
|
||||
|
||||
/* call to_hash on hash to keyword splat before converting block */
|
||||
DEFINE_INSN
|
||||
splatkw
|
||||
()
|
||||
(VALUE hash, VALUE block)
|
||||
(VALUE obj, VALUE block)
|
||||
// attr bool leaf = false; /* has rb_to_hash_type() */
|
||||
{
|
||||
obj = rb_to_hash_type(hash);
|
||||
}
|
||||
|
||||
/* put new Hash from n elements. n must be an even number. */
|
||||
DEFINE_INSN
|
||||
newhash
|
||||
|
|
|
@ -147,6 +147,23 @@ class TestCall < Test::Unit::TestCase
|
|||
assert_equal Hash, f(*[], **o).class
|
||||
end
|
||||
|
||||
def test_kwsplat_block_order
|
||||
o = Object.new
|
||||
ary = []
|
||||
o.define_singleton_method(:to_a) {ary << :to_a; []}
|
||||
o.define_singleton_method(:to_hash) {ary << :to_hash; {}}
|
||||
o.define_singleton_method(:to_proc) {ary << :to_proc; lambda{}}
|
||||
|
||||
def self.t(...) end
|
||||
|
||||
t(**o, &o)
|
||||
assert_equal([:to_hash, :to_proc], ary)
|
||||
|
||||
ary.clear
|
||||
t(*o, **o, &o)
|
||||
assert_equal([:to_a, :to_hash, :to_proc], ary)
|
||||
end
|
||||
|
||||
OVER_STACK_LEN = (ENV['RUBY_OVER_STACK_LEN'] || 150).to_i # Greater than VM_ARGC_STACK_MAX
|
||||
OVER_STACK_ARGV = OVER_STACK_LEN.times.to_a.freeze
|
||||
|
||||
|
|
|
@ -699,176 +699,178 @@ pub const YARVINSN_duphash: ruby_vminsn_type = 29;
|
|||
pub const YARVINSN_expandarray: ruby_vminsn_type = 30;
|
||||
pub const YARVINSN_concatarray: ruby_vminsn_type = 31;
|
||||
pub const YARVINSN_splatarray: ruby_vminsn_type = 32;
|
||||
pub const YARVINSN_newhash: ruby_vminsn_type = 33;
|
||||
pub const YARVINSN_newrange: ruby_vminsn_type = 34;
|
||||
pub const YARVINSN_pop: ruby_vminsn_type = 35;
|
||||
pub const YARVINSN_dup: ruby_vminsn_type = 36;
|
||||
pub const YARVINSN_dupn: ruby_vminsn_type = 37;
|
||||
pub const YARVINSN_swap: ruby_vminsn_type = 38;
|
||||
pub const YARVINSN_opt_reverse: ruby_vminsn_type = 39;
|
||||
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_definedivar: 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_send: 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_definedivar: ruby_vminsn_type = 145;
|
||||
pub const YARVINSN_trace_checkmatch: ruby_vminsn_type = 146;
|
||||
pub const YARVINSN_trace_checkkeyword: ruby_vminsn_type = 147;
|
||||
pub const YARVINSN_trace_checktype: ruby_vminsn_type = 148;
|
||||
pub const YARVINSN_trace_defineclass: ruby_vminsn_type = 149;
|
||||
pub const YARVINSN_trace_definemethod: ruby_vminsn_type = 150;
|
||||
pub const YARVINSN_trace_definesmethod: ruby_vminsn_type = 151;
|
||||
pub const YARVINSN_trace_send: ruby_vminsn_type = 152;
|
||||
pub const YARVINSN_trace_opt_send_without_block: ruby_vminsn_type = 153;
|
||||
pub const YARVINSN_trace_objtostring: ruby_vminsn_type = 154;
|
||||
pub const YARVINSN_trace_opt_str_freeze: ruby_vminsn_type = 155;
|
||||
pub const YARVINSN_trace_opt_nil_p: ruby_vminsn_type = 156;
|
||||
pub const YARVINSN_trace_opt_str_uminus: ruby_vminsn_type = 157;
|
||||
pub const YARVINSN_trace_opt_newarray_send: 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_splatkw: ruby_vminsn_type = 33;
|
||||
pub const YARVINSN_newhash: ruby_vminsn_type = 34;
|
||||
pub const YARVINSN_newrange: ruby_vminsn_type = 35;
|
||||
pub const YARVINSN_pop: ruby_vminsn_type = 36;
|
||||
pub const YARVINSN_dup: ruby_vminsn_type = 37;
|
||||
pub const YARVINSN_dupn: ruby_vminsn_type = 38;
|
||||
pub const YARVINSN_swap: ruby_vminsn_type = 39;
|
||||
pub const YARVINSN_opt_reverse: ruby_vminsn_type = 40;
|
||||
pub const YARVINSN_topn: ruby_vminsn_type = 41;
|
||||
pub const YARVINSN_setn: ruby_vminsn_type = 42;
|
||||
pub const YARVINSN_adjuststack: ruby_vminsn_type = 43;
|
||||
pub const YARVINSN_defined: ruby_vminsn_type = 44;
|
||||
pub const YARVINSN_definedivar: ruby_vminsn_type = 45;
|
||||
pub const YARVINSN_checkmatch: ruby_vminsn_type = 46;
|
||||
pub const YARVINSN_checkkeyword: ruby_vminsn_type = 47;
|
||||
pub const YARVINSN_checktype: ruby_vminsn_type = 48;
|
||||
pub const YARVINSN_defineclass: ruby_vminsn_type = 49;
|
||||
pub const YARVINSN_definemethod: ruby_vminsn_type = 50;
|
||||
pub const YARVINSN_definesmethod: ruby_vminsn_type = 51;
|
||||
pub const YARVINSN_send: ruby_vminsn_type = 52;
|
||||
pub const YARVINSN_opt_send_without_block: ruby_vminsn_type = 53;
|
||||
pub const YARVINSN_objtostring: ruby_vminsn_type = 54;
|
||||
pub const YARVINSN_opt_str_freeze: ruby_vminsn_type = 55;
|
||||
pub const YARVINSN_opt_nil_p: ruby_vminsn_type = 56;
|
||||
pub const YARVINSN_opt_str_uminus: ruby_vminsn_type = 57;
|
||||
pub const YARVINSN_opt_newarray_send: 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_splatkw: ruby_vminsn_type = 135;
|
||||
pub const YARVINSN_trace_newhash: ruby_vminsn_type = 136;
|
||||
pub const YARVINSN_trace_newrange: ruby_vminsn_type = 137;
|
||||
pub const YARVINSN_trace_pop: ruby_vminsn_type = 138;
|
||||
pub const YARVINSN_trace_dup: ruby_vminsn_type = 139;
|
||||
pub const YARVINSN_trace_dupn: ruby_vminsn_type = 140;
|
||||
pub const YARVINSN_trace_swap: ruby_vminsn_type = 141;
|
||||
pub const YARVINSN_trace_opt_reverse: ruby_vminsn_type = 142;
|
||||
pub const YARVINSN_trace_topn: ruby_vminsn_type = 143;
|
||||
pub const YARVINSN_trace_setn: ruby_vminsn_type = 144;
|
||||
pub const YARVINSN_trace_adjuststack: ruby_vminsn_type = 145;
|
||||
pub const YARVINSN_trace_defined: ruby_vminsn_type = 146;
|
||||
pub const YARVINSN_trace_definedivar: ruby_vminsn_type = 147;
|
||||
pub const YARVINSN_trace_checkmatch: ruby_vminsn_type = 148;
|
||||
pub const YARVINSN_trace_checkkeyword: ruby_vminsn_type = 149;
|
||||
pub const YARVINSN_trace_checktype: ruby_vminsn_type = 150;
|
||||
pub const YARVINSN_trace_defineclass: ruby_vminsn_type = 151;
|
||||
pub const YARVINSN_trace_definemethod: ruby_vminsn_type = 152;
|
||||
pub const YARVINSN_trace_definesmethod: ruby_vminsn_type = 153;
|
||||
pub const YARVINSN_trace_send: ruby_vminsn_type = 154;
|
||||
pub const YARVINSN_trace_opt_send_without_block: ruby_vminsn_type = 155;
|
||||
pub const YARVINSN_trace_objtostring: ruby_vminsn_type = 156;
|
||||
pub const YARVINSN_trace_opt_str_freeze: ruby_vminsn_type = 157;
|
||||
pub const YARVINSN_trace_opt_nil_p: ruby_vminsn_type = 158;
|
||||
pub const YARVINSN_trace_opt_str_uminus: ruby_vminsn_type = 159;
|
||||
pub const YARVINSN_trace_opt_newarray_send: 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),
|
||||
|
|
Загрузка…
Ссылка в новой задаче