summaryrefslogtreecommitdiff
path: root/variable.c
diff options
context:
space:
mode:
Diffstat (limited to 'variable.c')
-rw-r--r--variable.c15
1 files changed, 12 insertions, 3 deletions
diff --git a/variable.c b/variable.c
index 9ac538c37e..b65a1fc05e 100644
--- a/variable.c
+++ b/variable.c
@@ -335,22 +335,29 @@ rb_ivar_set(id, val)
}
VALUE
-rb_const_get(id)
+rb_const_get(class, id)
+ struct RClass *class;
ID id;
{
- struct RClass *class = (struct RClass*)CLASS_OF(Qself);
VALUE value;
while (class) {
if (class->iv_tbl && st_lookup(class->iv_tbl, id, &value)) {
return value;
}
- class = class->super;
+ if (BUILTIN_TYPE(class) == T_MODULE) {
+ class = RCLASS(C_Object);
+ }
+ else {
+ class = class->super;
+ }
}
/* pre-defined class */
if (st_lookup(class_tbl, id, &value)) return value;
+ /* here comes autoload code in the future. */
+
Fail("Uninitialized constant %s", rb_id2name(id));
/* not reached */
}
@@ -366,6 +373,8 @@ rb_const_bound(class, id)
}
class = class->super;
}
+ if (st_lookup(class_tbl, id, Qnil))
+ return TRUE;
return FALSE;
}