diff options
-rw-r--r-- | lib.c | 16 |
1 files changed, 6 insertions, 10 deletions
@@ -315,12 +315,8 @@ val subtypep(val sub, val sup) struct cobj_class *sup_cls = class_from_sym(sup); if (sub_cls && sup_cls) { - struct cobj_class *pcls = sub_cls; - do { - if (pcls == sup_cls) - return t; - pcls = pcls->super; - } while (pcls); + if (sub_cls->super == sup_cls) + return t; } } @@ -10547,6 +10543,7 @@ struct cobj_class *cobj_register_super(val cls_sym, struct cobj_class *super) { struct cobj_class *cls = cobj_register(cls_sym); cls->super = super; + bug_unless (cls->super->super == 0); return cls; } @@ -10578,10 +10575,9 @@ val cobjp(val obj) val cobjclassp(val obj, struct cobj_class *cls) { if (is_ptr(obj) && obj->t.type == COBJ) { - struct cobj_class *pcls; - for (pcls = obj->co.cls; pcls != 0; pcls = pcls->super) - if (pcls == cls) - return t; + struct cobj_class *ocls = obj->co.cls; + if (ocls == cls || ocls->super == cls) + return t; } return nil; } |