From 4fca570a742f7f1dae7830410a16998f34342c4c Mon Sep 17 00:00:00 2001 From: Kouichi Nakanishi Date: Wed, 12 Apr 2017 22:41:36 +0900 Subject: Find Class/Module in nested singleton class; fix #3598 --- src/variable.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) (limited to 'src') 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); -- cgit v1.2.3 From d4205c9b20e7ac0017d80314ec65c906308f04c9 Mon Sep 17 00:00:00 2001 From: Kouichi Nakanishi Date: Wed, 12 Apr 2017 23:25:22 +0900 Subject: Use while statement instead of for statement --- src/variable.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/variable.c b/src/variable.c index 5e007c9fa..ffe8b954b 100644 --- a/src/variable.c +++ b/src/variable.c @@ -953,7 +953,8 @@ mrb_vm_const_get(mrb_state *mrb, mrb_sym sym) if (c->iv && iv_get(mrb, c->iv, sym, &v)) { return v; } - for (c2 = c; c2 && c2->tt == MRB_TT_SCLASS;) { + c2 = c; + while (c2 && c2->tt == MRB_TT_SCLASS) { mrb_value klass; klass = mrb_obj_iv_get(mrb, (struct RObject *)c2, mrb_intern_lit(mrb, "__attached__")); -- cgit v1.2.3