summaryrefslogtreecommitdiff
path: root/vm_insnhelper.c
diff options
context:
space:
mode:
Diffstat (limited to 'vm_insnhelper.c')
-rw-r--r--vm_insnhelper.c5
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;