References: DEFCLASS, 4.3.1

Problem Description:

DEFCLASS states that for standard classes, "It is not required that the superclasses of a class be defined before the defclass form for that class is evaluated." Let's call such a class with a not-yet-defined superclass an "incomplete class". One can now argue whether an incomplete class is a class or not, i.e. if FIND-CLASS is required to return it, given its name.

  • Since DEFCLASS says "defclass defines a new named class", an incomplete class should be considered as a class.
  • CLHS 4.3.1 says that a class determines the structure of a set of objects. This is not true for incomplete classes, as they cannot be instantiated.
  • CLHS 4.3.1 says that each class has a class precedence list. Incomplete classes don't, since the complete list of superclasses is unknown.
  • CLHS 4.3.1 says that the class t is a superclass of every class except itself. So there should be a chain of direct-superclass relations from an incomplete class to t. But for incomplete classes for which all direct superclasses don't exist yet there is no such chain.

You'll want to look into the MOP's FORWARD-REFERENCED-CLASS. Notably, Section 5.3 Inheritance structure of metaobject classes and Section 5.5.2 Class finalization protocol of AMOP talk about it a bit.