summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--insns.def2
-rw-r--r--vm_insnhelper.c7
2 files changed, 6 insertions, 3 deletions
diff --git a/insns.def b/insns.def
index 018e3112ba..371361512f 100644
--- a/insns.def
+++ b/insns.def
@@ -250,7 +250,7 @@ setclassvariable
// attr bool leaf = false; /* has rb_warning() */
{
vm_ensure_not_refinement_module(GET_SELF());
- vm_setclassvariable(GET_ISEQ(), vm_get_cref(GET_EP()), GET_CFP(), id, val, (ICVARC)ic);
+ vm_setclassvariable(GET_ISEQ(), GET_CFP(), id, val, (ICVARC)ic);
}
/* Get constant variable id. If klass is Qnil and allow_nil is Qtrue, constants
diff --git a/vm_insnhelper.c b/vm_insnhelper.c
index 7323d80834..75809f7d86 100644
--- a/vm_insnhelper.c
+++ b/vm_insnhelper.c
@@ -1347,8 +1347,10 @@ rb_vm_getclassvariable(const rb_iseq_t *iseq, const rb_control_frame_t *cfp, ID
}
static inline void
-vm_setclassvariable(const rb_iseq_t *iseq, const rb_cref_t *cref, const rb_control_frame_t *cfp, ID id, VALUE val, ICVARC ic)
+vm_setclassvariable(const rb_iseq_t *iseq, const rb_control_frame_t *reg_cfp, ID id, VALUE val, ICVARC ic)
{
+ const rb_cref_t *cref;
+
if (ic->entry && ic->entry->global_cvar_state == GET_GLOBAL_CVAR_STATE()) {
RB_DEBUG_COUNTER_INC(cvar_write_inline_hit);
@@ -1356,7 +1358,8 @@ vm_setclassvariable(const rb_iseq_t *iseq, const rb_cref_t *cref, const rb_contr
return;
}
- VALUE klass = vm_get_cvar_base(cref, cfp, 1);
+ cref = vm_get_cref(GET_EP());
+ VALUE klass = vm_get_cvar_base(cref, reg_cfp, 1);
rb_cvar_set(klass, id, val);