\h'2n'} obj;
};
-struct SodObject__ilayout {
+struct SodClass__ilayout {
\h'2n'union {
\h'4n'struct SodClass__ichain_obj {
\h'6n'const struct SodClass__vt_obj *_vt;
\h'8n'const char *name;
\h'8n'const char *nick;
\h'8n'size_t initsz;
+\h'8n'size_t align;
\h'8n'void *(*imprint)(void *\fIp\fB);
\h'8n'size_t n_supers;
\h'8n'const SodClass *const *supers;
.B size_t initsz;
The size in bytes required to store an instance of the class.
.TP
+.B size_t align;
+A sufficient alignment for the class's instance storage.
+.TP
.BI "void *(*imprint)(void *" p );
A pointer to a function:
given a pointer
\h'6n'} \fIc\fB;
\h'4n'} \fIc\fB;
\h'4n'\fR...\fB
-\h'4n'struct \fIH\fB__ichain_\fIh\fB \fIh\fB;
+\h'4n'struct \fIA\fB__ichain_\fIh\fB \fIa\fB;
\h'2n'} \fIh\fB;
\h'2n'union \fIB\fB__ichainu_\fIi\fB \fIi\fB;
\h'2n'\fR...\fB
superclasses
.IR A
in the same chain in some (unimportant) order.
-A `pointer to
-.IR C '
-is always assumed
-(and, indeed, defined in C's type system)
-to be a pointer to the
-.B struct
-.IB C __ichain_ h \fR.
+The (somewhat obtuse) purpose of this union is to
+engage the `common initial sequence' rule of
+C99 (clause 6.5.2.3).
.PP
The
.B ichain
.IB C __islots
.IB c ;
.PP
+A `pointer to
+.IR C '
+is always assumed
+(and, indeed, defined in C's type system)
+to be a pointer to the
+.B struct
+.IB C __ichain_ h \fR.
+.PP
Finally, the
.B islots
structure simply contains one member for each slot defined by
.ft P
.fi
.PP
+In the following,
+let
+.I M
+be the metaclass of
+.IR C .
+.PP
The outer layer is a
.B union
.IB C __vtu_ h