diff options
| author | Kouichi Nakanishi <[email protected]> | 2017-04-12 22:41:36 +0900 |
|---|---|---|
| committer | Kouichi Nakanishi <[email protected]> | 2017-04-12 22:41:36 +0900 |
| commit | 4fca570a742f7f1dae7830410a16998f34342c4c (patch) | |
| tree | be0ff58200d57183f2a59fea17cb03f3fba35427 /src/variable.c | |
| parent | 0fb05eb55f881b3508584cb3b199bddd37dc8825 (diff) | |
| download | mruby-4fca570a742f7f1dae7830410a16998f34342c4c.tar.gz mruby-4fca570a742f7f1dae7830410a16998f34342c4c.zip | |
Find Class/Module in nested singleton class; fix #3598
Diffstat (limited to 'src/variable.c')
| -rw-r--r-- | src/variable.c | 7 |
1 files changed, 3 insertions, 4 deletions
diff --git a/src/variable.c b/src/variable.c index e639eeb50..5e007c9fa 100644 --- a/src/variable.c +++ b/src/variable.c @@ -953,14 +953,13 @@ 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) { + for (c2 = c; 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); |
