diff options
author | Nobuyoshi Nakada <nobu@ruby-lang.org> | 2021-11-21 00:31:51 +0900 |
---|---|---|
committer | Nobuyoshi Nakada <nobu@ruby-lang.org> | 2021-11-21 00:31:51 +0900 |
commit | 8f3432cd4466c35cd9f482de3779d76f3957968f (patch) | |
tree | 18ebb49c357a05646bef52e4b5c2ef52b2460d6f /vm_insnhelper.c | |
parent | c5ec05d047f3c3f32b34d705088d407429d4303a (diff) |
Fix setting struct member by public_send
Notes
Notes:
Merged: https://github.com/ruby/ruby/pull/5152
Diffstat (limited to 'vm_insnhelper.c')
-rw-r--r-- | vm_insnhelper.c | 9 |
1 files changed, 4 insertions, 5 deletions
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; } |