Index: generic/xotcl.c =================================================================== diff -u -rd3aa8e069917e7ba7d69e936ec4e563b7e0dc34d -r1e72a93dd117734d0ab49c7ea7aa87f69f9a00b5 --- generic/xotcl.c (.../xotcl.c) (revision d3aa8e069917e7ba7d69e936ec4e563b7e0dc34d) +++ generic/xotcl.c (.../xotcl.c) (revision 1e72a93dd117734d0ab49c7ea7aa87f69f9a00b5) @@ -7738,18 +7738,29 @@ XOTclClass *result; XOTclClasses *sc; /* check superclasses of metaclass */ - /*fprintf(stderr, "DefaultSuperClass: search in superclasses starting with %p\n", cl->super);*/ + /*fprintf(stderr, "DefaultSuperClass for %s: search in superclasses starting with %p meta %d\n", + className(cl), cl->super, isMeta);*/ + + if (isMeta) { + /*fprintf(stderr, " ... is %s already root meta %d\n", + className(mcl->object.cl), + mcl->object.cl->object.flags & XOTCL_IS_ROOT_META_CLASS);*/ + if (mcl->object.cl->object.flags & XOTCL_IS_ROOT_META_CLASS) { + return mcl->object.cl; + } + } for (sc = mcl->super; sc && sc->cl != cl; sc = sc->nextPtr) { /*fprintf(stderr, " ... check ismeta %d %s root mcl %d root cl %d\n", - isMeta, className(sc->cl), - sc->cl->object.flags & XOTCL_IS_ROOT_META_CLASS, - sc->cl->object.flags & XOTCL_IS_ROOT_CLASS);*/ + isMeta, className(sc->cl), + sc->cl->object.flags & XOTCL_IS_ROOT_META_CLASS, + sc->cl->object.flags & XOTCL_IS_ROOT_CLASS);*/ if (isMeta) { if (sc->cl->object.flags & XOTCL_IS_ROOT_META_CLASS) { return sc->cl; } } else { if (sc->cl->object.flags & XOTCL_IS_ROOT_CLASS) { + /*fprintf(stderr, "found root class %p\n", sc->cl);*/ return sc->cl; } }