summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2017-04-13 00:42:27 +0900
committerGitHub <[email protected]>2017-04-13 00:42:26 +0900
commitc0a4b1a0c6ebd28c35a856862fbe5f5ce0e6aa72 (patch)
treeb0289f131b222fcfe919cbd8e334fe2078948911
parent3123549bcb3a7d76e2f890760fe4b36f50d415b5 (diff)
parentd4205c9b20e7ac0017d80314ec65c906308f04c9 (diff)
downloadmruby-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.c8
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);