diff options
Diffstat (limited to 'variable.c')
-rw-r--r-- | variable.c | 10 |
1 files changed, 4 insertions, 6 deletions
diff --git a/variable.c b/variable.c index e2d9451182..f579a677e8 100644 --- a/variable.c +++ b/variable.c @@ -129,6 +129,9 @@ find_class_path(klass) st_foreach(rb_class_tbl, fc_i, &arg); } if (arg.path) { + if (!ROBJECT(klass)->iv_tbl) { + ROBJECT(klass)->iv_tbl = st_init_numtable(); + } st_insert(ROBJECT(klass)->iv_tbl,rb_intern("__classpath__"),arg.path); return arg.path; } @@ -142,12 +145,7 @@ classname(klass) VALUE path = Qnil; ID classpath = rb_intern("__classpath__"); - if (TYPE(klass) == T_ICLASS) { - klass = RBASIC(klass)->klass; - } - while (TYPE(klass) == T_ICLASS || FL_TEST(klass, FL_SINGLETON)) { - klass = (VALUE)RCLASS(klass)->super; - } + klass = rb_class_real(klass); if (!klass) klass = rb_cObject; if (ROBJECT(klass)->iv_tbl && !st_lookup(ROBJECT(klass)->iv_tbl, classpath, &path)) { |