summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2018-09-04 21:06:36 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2018-09-04 21:19:07 +0900
commit9b5910bd0f674f5948cd1185e07d8a024477d162 (patch)
tree5c1449a9073cf1069a590accb0715d98f28e69ca /src
parent7592dfcf7dfabc5d5df26906d6571d4f61aa8de7 (diff)
downloadmruby-9b5910bd0f674f5948cd1185e07d8a024477d162.tar.gz
mruby-9b5910bd0f674f5948cd1185e07d8a024477d162.zip
Revert "Remove top-level constant lookup; CRuby2.5"; fix #4070
This reverts commit c96def7c96c50f3b8e22e47ce31a6c5a37939dfd. This change was from my misunderstanding.
Diffstat (limited to 'src')
-rw-r--r--src/variable.c11
1 files changed, 5 insertions, 6 deletions
diff --git a/src/variable.c b/src/variable.c
index e753f8d29..00bdb4b8d 100644
--- a/src/variable.c
+++ b/src/variable.c
@@ -732,24 +732,23 @@ mod_const_check(mrb_state *mrb, mrb_value mod)
}
static mrb_value
-const_get(mrb_state *mrb, struct RClass *base, mrb_sym sym, mrb_bool top)
+const_get(mrb_state *mrb, struct RClass *base, mrb_sym sym)
{
struct RClass *c = base;
mrb_value v;
mrb_bool retry = FALSE;
mrb_value name;
- struct RClass *oclass = mrb->object_class;
L_RETRY:
while (c) {
- if (top || c != oclass || base == oclass) {
+ if (c->iv) {
if (iv_get(mrb, c->iv, sym, &v))
return v;
}
c = c->super;
}
if (!retry && base->tt == MRB_TT_MODULE) {
- c = oclass;
+ c = mrb->object_class;
retry = TRUE;
goto L_RETRY;
}
@@ -761,7 +760,7 @@ MRB_API mrb_value
mrb_const_get(mrb_state *mrb, mrb_value mod, mrb_sym sym)
{
mod_const_check(mrb, mod);
- return const_get(mrb, mrb_class_ptr(mod), sym, FALSE);
+ return const_get(mrb, mrb_class_ptr(mod), sym);
}
mrb_value
@@ -796,7 +795,7 @@ mrb_vm_const_get(mrb_state *mrb, mrb_sym sym)
}
proc = proc->upper;
}
- return const_get(mrb, c, sym, TRUE);
+ return const_get(mrb, c, sym);
}
MRB_API void