diff options
Diffstat (limited to 'insns.def')
-rw-r--r-- | insns.def | 19 |
1 files changed, 8 insertions, 11 deletions
@@ -889,15 +889,13 @@ sendforward struct rb_forwarding_call_data adjusted_cd; struct rb_callinfo adjusted_ci; - CALL_DATA _cd = cd; + VALUE bh = vm_caller_setup_fwd_args(GET_EC(), GET_CFP(), cd, blockiseq, 0, &adjusted_cd, &adjusted_ci); - VALUE bh = vm_caller_setup_fwd_args(GET_EC(), GET_CFP(), &cd, blockiseq, 0, &adjusted_cd, &adjusted_ci); - - val = vm_sendish(ec, GET_CFP(), cd, bh, mexp_search_method); + val = vm_sendish(ec, GET_CFP(), &adjusted_cd.cd, bh, mexp_search_method); JIT_EXEC(ec, val); - if (_cd->cc != cd->cc && vm_cc_markable(cd->cc)) { - RB_OBJ_WRITE(GET_ISEQ(), &_cd->cc, cd->cc); + if (cd->cc != adjusted_cd.cd.cc && vm_cc_markable(adjusted_cd.cd.cc)) { + RB_OBJ_WRITE(GET_ISEQ(), &cd->cc, adjusted_cd.cd.cc); } if (UNDEF_P(val)) { @@ -1042,17 +1040,16 @@ invokesuperforward // attr rb_snum_t sp_inc = sp_inc_of_sendish(cd->ci); // attr rb_snum_t comptime_sp_inc = sp_inc_of_sendish(ci); { - CALL_DATA _cd = cd; struct rb_forwarding_call_data adjusted_cd; struct rb_callinfo adjusted_ci; - VALUE bh = vm_caller_setup_fwd_args(GET_EC(), GET_CFP(), &cd, blockiseq, 1, &adjusted_cd, &adjusted_ci); + VALUE bh = vm_caller_setup_fwd_args(GET_EC(), GET_CFP(), cd, blockiseq, 1, &adjusted_cd, &adjusted_ci); - val = vm_sendish(ec, GET_CFP(), cd, bh, mexp_search_super); + val = vm_sendish(ec, GET_CFP(), &adjusted_cd.cd, bh, mexp_search_super); JIT_EXEC(ec, val); - if (_cd->cc != cd->cc && vm_cc_markable(cd->cc)) { - RB_OBJ_WRITE(GET_ISEQ(), &_cd->cc, cd->cc); + if (cd->cc != adjusted_cd.cd.cc && vm_cc_markable(adjusted_cd.cd.cc)) { + RB_OBJ_WRITE(GET_ISEQ(), &cd->cc, adjusted_cd.cd.cc); } if (UNDEF_P(val)) { |