diff options
Diffstat (limited to 'variable.c')
-rw-r--r-- | variable.c | 15 |
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; } |