summaryrefslogtreecommitdiffhomepage
path: root/src/class.c
diff options
context:
space:
mode:
authorKouichi Nakanishi <[email protected]>2017-04-06 23:31:34 +0900
committerKouichi Nakanishi <[email protected]>2017-04-06 23:31:34 +0900
commitfd0f79ca677759251e011cbe3f7fbbe88db57b62 (patch)
tree8da0d34869be64e1080f6ed67ea384bf9037f14a /src/class.c
parente5b61d34f65cabfbe88f3f1709a1f9cff86585de (diff)
downloadmruby-fd0f79ca677759251e011cbe3f7fbbe88db57b62.tar.gz
mruby-fd0f79ca677759251e011cbe3f7fbbe88db57b62.zip
Get constant of parent class even if child class is defined in signleton class; fix #3575
Diffstat (limited to 'src/class.c')
-rw-r--r--src/class.c11
1 files changed, 10 insertions, 1 deletions
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