diff --git a/include/mruby/internal.h b/include/mruby/internal.h index 168286618..ea3014673 100644 --- a/include/mruby/internal.h +++ b/include/mruby/internal.h @@ -171,7 +171,6 @@ void mrb_vm_special_set(mrb_state*, mrb_sym, mrb_value); mrb_value mrb_vm_cv_get(mrb_state*, mrb_sym); void mrb_vm_cv_set(mrb_state*, mrb_sym, mrb_value); mrb_value mrb_vm_const_get(mrb_state*, mrb_sym); -void mrb_vm_const_set(mrb_state*, mrb_sym, mrb_value); size_t mrb_obj_iv_tbl_memsize(mrb_value); mrb_value mrb_obj_iv_inspect(mrb_state*, struct RObject*); void mrb_obj_iv_set_force(mrb_state *mrb, struct RObject *obj, mrb_sym sym, mrb_value v); diff --git a/src/variable.c b/src/variable.c index 317d4acfa..11dbb717d 100644 --- a/src/variable.c +++ b/src/variable.c @@ -865,17 +865,7 @@ mrb_const_set(mrb_state *mrb, mrb_value mod, mrb_sym sym, mrb_value v) if (mrb_type(v) == MRB_TT_CLASS || mrb_type(v) == MRB_TT_MODULE) { mrb_class_name_class(mrb, mrb_class_ptr(mod), mrb_class_ptr(v), sym); } - mrb_iv_set(mrb, mod, sym, v); -} - -void -mrb_vm_const_set(mrb_state *mrb, mrb_sym sym, mrb_value v) -{ - struct RClass *c; - - c = MRB_PROC_TARGET_CLASS(mrb->c->ci->proc); - if (!c) c = mrb->object_class; - mrb_obj_iv_set(mrb, (struct RObject*)c, sym, v); + mrb_obj_iv_set(mrb, mrb_obj_ptr(mod), sym, v); } MRB_API void diff --git a/src/vm.c b/src/vm.c index c7e4cc8f2..319ea5f16 100644 --- a/src/vm.c +++ b/src/vm.c @@ -1642,8 +1642,10 @@ RETRY_TRY_BLOCK: } CASE(OP_SETCONST, BB) { - mrb_vm_const_set(mrb, irep->syms[b], regs[a]); ci = mrb->c->ci; + struct RClass *c = MRB_PROC_TARGET_CLASS(ci->proc); + if (!c) c = mrb->object_class; + mrb_const_set(mrb, mrb_obj_value(c), irep->syms[b], regs[a]); NEXT; }