diff options
| author | Kouichi Nakanishi <[email protected]> | 2017-04-06 23:31:34 +0900 |
|---|---|---|
| committer | Kouichi Nakanishi <[email protected]> | 2017-04-06 23:31:34 +0900 |
| commit | fd0f79ca677759251e011cbe3f7fbbe88db57b62 (patch) | |
| tree | 8da0d34869be64e1080f6ed67ea384bf9037f14a /src/class.c | |
| parent | e5b61d34f65cabfbe88f3f1709a1f9cff86585de (diff) | |
| download | mruby-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.c | 11 |
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 |
