summaryrefslogtreecommitdiff
path: root/object.c
diff options
context:
space:
mode:
Diffstat (limited to 'object.c')
-rw-r--r--object.c37
1 files changed, 30 insertions, 7 deletions
diff --git a/object.c b/object.c
index 4f844be5a3..7928592250 100644
--- a/object.c
+++ b/object.c
@@ -2530,7 +2530,19 @@ rb_mod_const_get(int argc, VALUE *argv, VALUE mod)
name = ID2SYM(id);
goto wrong_name;
}
- mod = RTEST(recur) ? rb_const_get(mod, id) : rb_const_get_at(mod, id);
+#if 0
+ mod = rb_const_get_0(mod, id, beglen > 0 || !RTEST(recur), RTEST(recur), FALSE);
+#else
+ if (!RTEST(recur)) {
+ mod = rb_const_get_at(mod, id);
+ }
+ else if (beglen == 0) {
+ mod = rb_const_get(mod, id);
+ }
+ else {
+ mod = rb_const_get_from(mod, id);
+ }
+#endif
}
return mod;
@@ -2678,16 +2690,27 @@ rb_mod_const_defined(int argc, VALUE *argv, VALUE mod)
name = ID2SYM(id);
goto wrong_name;
}
- if (RTEST(recur)) {
- if (!rb_const_defined(mod, id))
- return Qfalse;
- mod = rb_const_get(mod, id);
- }
- else {
+
+#if 0
+ mod = rb_const_search(mod, id, beglen > 0 || !RTEST(recur), RTEST(recur), FALSE);
+ if (mod == Qundef) return Qfalse;
+#else
+ if (!RTEST(recur)) {
if (!rb_const_defined_at(mod, id))
return Qfalse;
mod = rb_const_get_at(mod, id);
}
+ else if (beglen == 0) {
+ if (!rb_const_defined(mod, id))
+ return Qfalse;
+ mod = rb_const_get(mod, id);
+ }
+ else {
+ if (!rb_const_defined_from(mod, id))
+ return Qfalse;
+ mod = rb_const_get_from(mod, id);
+ }
+#endif
if (p < pend && !RB_TYPE_P(mod, T_MODULE) && !RB_TYPE_P(mod, T_CLASS)) {
rb_raise(rb_eTypeError, "%"PRIsVALUE" does not refer to class/module",