From fd0f79ca677759251e011cbe3f7fbbe88db57b62 Mon Sep 17 00:00:00 2001 From: Kouichi Nakanishi Date: Thu, 6 Apr 2017 23:31:34 +0900 Subject: Get constant of parent class even if child class is defined in signleton class; fix #3575 --- src/class.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/class.c b/src/class.c index 7cb544b43..baefe3fde 100644 --- a/src/class.c +++ b/src/class.c @@ -127,10 +127,19 @@ MRB_API struct RClass* mrb_class_outer_module(mrb_state *mrb, struct RClass *c) { mrb_value outer; + struct RClass *cls; outer = mrb_obj_iv_get(mrb, (struct RObject*)c, mrb_intern_lit(mrb, "__outer__")); if (mrb_nil_p(outer)) return NULL; - return mrb_class_ptr(outer); + cls = mrb_class_ptr(outer); + if (cls->tt == MRB_TT_SCLASS) + { + mrb_value klass; + klass = mrb_obj_iv_get(mrb, (struct RObject *)cls, + mrb_intern_lit(mrb, "__attached__")); + cls = mrb_class_ptr(klass); + } + return cls; } static void -- cgit v1.2.3