From 8f3432cd4466c35cd9f482de3779d76f3957968f Mon Sep 17 00:00:00 2001 From: Nobuyoshi Nakada Date: Sun, 21 Nov 2021 00:31:51 +0900 Subject: Fix setting struct member by public_send --- vm_insnhelper.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) (limited to 'vm_insnhelper.c') diff --git a/vm_insnhelper.c b/vm_insnhelper.c index baf77acb14..d1930d146c 100644 --- a/vm_insnhelper.c +++ b/vm_insnhelper.c @@ -3531,7 +3531,7 @@ vm_call_opt_block_call(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, } static VALUE -vm_call_opt_struct_aref0(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, struct rb_calling_info *calling) +vm_call_opt_struct_aref0(rb_execution_context_t *ec, struct rb_calling_info *calling) { VALUE recv = calling->recv; @@ -3548,16 +3548,15 @@ vm_call_opt_struct_aref(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, { RB_DEBUG_COUNTER_INC(ccf_opt_struct_aref); - VALUE ret = vm_call_opt_struct_aref0(ec, reg_cfp, calling); + VALUE ret = vm_call_opt_struct_aref0(ec, calling); reg_cfp->sp -= 1; return ret; } static VALUE -vm_call_opt_struct_aset0(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, struct rb_calling_info *calling) +vm_call_opt_struct_aset0(rb_execution_context_t *ec, struct rb_calling_info *calling, VALUE val) { VALUE recv = calling->recv; - VALUE val = *(reg_cfp->sp - 1); VM_ASSERT(RB_TYPE_P(recv, T_STRUCT)); VM_ASSERT(vm_cc_cme(calling->cc)->def->type == VM_METHOD_TYPE_OPTIMIZED); @@ -3576,7 +3575,7 @@ vm_call_opt_struct_aset(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, { RB_DEBUG_COUNTER_INC(ccf_opt_struct_aset); - VALUE ret = vm_call_opt_struct_aset0(ec, reg_cfp, calling); + VALUE ret = vm_call_opt_struct_aset0(ec, calling, *(reg_cfp->sp - 1)); reg_cfp->sp -= 2; return ret; } -- cgit v1.2.3