diff options
Diffstat (limited to 'vm_insnhelper.c')
-rw-r--r-- | vm_insnhelper.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/vm_insnhelper.c b/vm_insnhelper.c index 8ca446d3a4..06e6a577bc 100644 --- a/vm_insnhelper.c +++ b/vm_insnhelper.c @@ -2632,7 +2632,10 @@ find_defined_class_by_owner(VALUE current_class, VALUE target_owner) VALUE klass = current_class; /* for prepended Module, then start from cover class */ - if (RB_TYPE_P(klass, T_ICLASS) && FL_TEST(klass, RICLASS_IS_ORIGIN)) klass = RBASIC_CLASS(klass); + if (RB_TYPE_P(klass, T_ICLASS) && FL_TEST(klass, RICLASS_IS_ORIGIN) && + RB_TYPE_P(RBASIC_CLASS(klass), T_CLASS)) { + klass = RBASIC_CLASS(klass); + } while (RTEST(klass)) { VALUE owner = RB_TYPE_P(klass, T_ICLASS) ? RBASIC_CLASS(klass) : klass; |