.I different
structures.
.PP
-The instance layout split neatly into disjoint chains.
+The instance layout splits neatly into disjoint chains.
This is necessary because
each
.B ichain
.I M
in the same chain as
.IR J .
-Then, if there is currently no class pointer of type
-.IR Q ,
+If there is currently no class pointer
+for the chain headed by
+.IR J ,
then add a member
.RS
.IP
.B islots
structure within
.IR M 's
-class object.
+class object,
+where
+.I Q
+is the most specific superclass of
+.I M
+in the same chain as
+.IR J .
.RE
.hP \*o
Examine the superclass chains of
.B #define
.IB C __class
.BI (& C __classobj. j . r )
+.br
+.B #define
+.IB C __cls_ k
+.BI (& C __classobj. k . n )
+.br
+\&...
.PP
The exported symbol
.IB C __classobj
i.e., the metaclass of the least specific superclass of
.IR C ;
usually this is
-.BR "const SodClass *" .
+.BR "const SodClass\ *" .
+For each chain of
+.IR C 's
+metaclass, a macro
+.IB C __cls_ k
+is defined, usable as a pointer of type
+.B const
+.IR N \ \c
+.BR * ,
+where
+.I K
+and
+.I N
+are the chain's head and tail classes
+(i.e., the least- and most-specific classes in the chain)
+respectively;
+this macro is
+.I omitted
+if
+.IR N "\ =\ " R ,
+i.e., in the common case where
+.IR C 's
+metaclass is precisely the root metaclass,
+since the existing
+.IB C __class
+macro is already sufficient.
.
.\"--------------------------------------------------------------------------
.SH SEE ALSO