summaryrefslogtreecommitdiff
path: root/vm_insnhelper.c
diff options
context:
space:
mode:
authorNobuyoshi Nakada <nobu@ruby-lang.org>2021-11-21 00:31:51 +0900
committerNobuyoshi Nakada <nobu@ruby-lang.org>2021-11-21 00:31:51 +0900
commit8f3432cd4466c35cd9f482de3779d76f3957968f (patch)
tree18ebb49c357a05646bef52e4b5c2ef52b2460d6f /vm_insnhelper.c
parentc5ec05d047f3c3f32b34d705088d407429d4303a (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.c9
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;
}