diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2017-04-13 00:42:27 +0900 |
|---|---|---|
| committer | GitHub <[email protected]> | 2017-04-13 00:42:26 +0900 |
| commit | c0a4b1a0c6ebd28c35a856862fbe5f5ce0e6aa72 (patch) | |
| tree | b0289f131b222fcfe919cbd8e334fe2078948911 | |
| parent | 3123549bcb3a7d76e2f890760fe4b36f50d415b5 (diff) | |
| parent | d4205c9b20e7ac0017d80314ec65c906308f04c9 (diff) | |
| download | mruby-c0a4b1a0c6ebd28c35a856862fbe5f5ce0e6aa72.tar.gz mruby-c0a4b1a0c6ebd28c35a856862fbe5f5ce0e6aa72.zip | |
Merge pull request #3604 from keizo042/fix_issue3598
Find Class/Module in nested singleton class; fix #3598
| -rw-r--r-- | src/variable.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/src/variable.c b/src/variable.c index e639eeb50..ffe8b954b 100644 --- a/src/variable.c +++ b/src/variable.c @@ -953,14 +953,14 @@ mrb_vm_const_get(mrb_state *mrb, mrb_sym sym) if (c->iv && iv_get(mrb, c->iv, sym, &v)) { return v; } - if (c->tt == MRB_TT_SCLASS) { + c2 = c; + while (c2 && c2->tt == MRB_TT_SCLASS) { mrb_value klass; - klass = mrb_obj_iv_get(mrb, (struct RObject *)c, + klass = mrb_obj_iv_get(mrb, (struct RObject *)c2, mrb_intern_lit(mrb, "__attached__")); c2 = mrb_class_ptr(klass); - if (c2->tt == MRB_TT_CLASS || c2->tt == MRB_TT_MODULE) - c = c2; } + if (c2->tt == MRB_TT_CLASS || c2->tt == MRB_TT_MODULE) c = c2; c2 = c; for (;;) { c2 = mrb_class_outer_module(mrb, c2); |
