diff options
Diffstat (limited to 'vm_insnhelper.c')
-rw-r--r-- | vm_insnhelper.c | 11 |
1 files changed, 5 insertions, 6 deletions
diff --git a/vm_insnhelper.c b/vm_insnhelper.c index ff59a609e5..1470844309 100644 --- a/vm_insnhelper.c +++ b/vm_insnhelper.c @@ -1866,12 +1866,10 @@ vm_search_normal_superclass(VALUE klass) { if (BUILTIN_TYPE(klass) == T_ICLASS && FL_TEST(RBASIC(klass)->klass, RMODULE_IS_REFINEMENT)) { - return rb_refinement_module_get_refined_class(RBASIC(klass)->klass); - } - else { - klass = RCLASS_ORIGIN(klass); - return RCLASS_SUPER(klass); + klass = RBASIC(klass)->klass; } + klass = RCLASS_ORIGIN(klass); + return RCLASS_SUPER(klass); } static void @@ -1945,7 +1943,8 @@ vm_search_super_method(rb_thread_t *th, rb_control_frame_t *reg_cfp, rb_call_inf current_defind_class = RCLASS_REFINED_CLASS(current_defind_class); } - if (!rb_obj_is_kind_of(ci->recv, current_defind_class)) { + if (!FL_TEST(current_defind_class, RMODULE_INCLUDED_INTO_REFINEMENT) && + !rb_obj_is_kind_of(ci->recv, current_defind_class)) { rb_raise(rb_eNotImpError, "super from singleton method that is defined to multiple classes is not supported; this will be fixed in 2.0.0 or later"); } |