X-Git-Url: https://git.distorted.org.uk/~mdw/sod/blobdiff_plain/020b9e2b4364c61a668d47c4c5405295349817d8..faf3eb58d676c3abbef538784e26ca398d339caf:/doc/structures.tex

diff --git a/doc/structures.tex b/doc/structures.tex
index 2cebaa1..2dfe355 100644
--- a/doc/structures.tex
+++ b/doc/structures.tex
@@ -201,7 +201,7 @@ recommended.
 
 \begin{describe}[SodClass]{cls}
     {[nick = cls, link = SodObject]                             \\
-     class SodClass : SodObject \{                              \\ \ind
+     class SodClass: SodObject \{                               \\ \ind
        const char *name;                                        \\
        const char *nick;                                        \\
        size_t initsz;                                           \\
@@ -363,7 +363,7 @@ type @|struct $C$__ilayout|.
           @<type>_n @<slot>_n;                                \-\\
         \} $c$;                                               \-\\
       \} $c$;                                                   \\
-      struct $H$__ichain_$h$ $h$;                               \\
+      struct $A$__ichain_$h$ $a$;                               \\
       \quad$\vdots$                                           \-\\
     \} $h$;                                                     \\
     union $B$__ichainu_$i$ $i$;                                 \\
@@ -380,7 +380,7 @@ transitive closure of the `links to' relation.)  Chains are identified by
 naming their least specific classes; the least specific class in a chain is
 called the \emph{chain head}.  Suppose that the chain head of the chain
 containing $C$ itself is named $H$ (though keep in mind that it's possible
-that .$H$ is in fact $C$ itself.)
+that $H$ is in fact $C$ itself.)
 
 \subsubsection{The ilayout structure}
 The @|ilayout| structure contains one member for each of $C$'s superclass
@@ -409,12 +409,11 @@ and this is followed by corresponding members
   struct $A$__ichain_$h$ $a$;
 \end{prog}
 for each of $C$'s superclasses $A$ in the same chain in some (unimportant)
-order.
+order.  The (somewhat obtuse) purpose of this union is to engage the `common
+initial sequence' rule of \cite[6.5.2.3]{FIXME:C99}.
 
 \subsubsection{The ichain structure}
-The
-@|ichain|
-structure contains (in order), a pointer
+The @|ichain| structure contains (in order), a pointer
 \begin{prog}
   const struct $C$__vt_$h$ *_vt;
 \end{prog}
@@ -478,6 +477,8 @@ structure.
   extern const union $C$__vtu_$h$ $C$__vtable_$h$;
 \end{prog}
 
+In the following, let $M$ be the metaclass of $C$.
+
 \subsubsection{The vtu union}
 The outer layer is a @|union $C$__vtu_$h$| containing a member
 \begin{prog}
@@ -486,18 +487,11 @@ The outer layer is a @|union $C$__vtu_$h$| containing a member
 for each of $C$'s superclasses $A$ in the same chain, with $C$ itself listed
 first.
 
-This is mostly an irrelevant detail,
-whose purpose is to defend against malicious compilers:
-pointers are always to one of the inner
-@|vt|
-structures.
-It's important only because it's the outer
-@|vtu|
-union which is exported by name.
-Specifically, for each chain of
-$C$'s
-superclasses
-there is an external object
+This is mostly an irrelevant detail, whose purpose is to defend against
+malicious compilers: pointers are always to one of the inner @|vt|
+structures. It's important only because it's the outer @|vtu| union which is
+exported by name. Specifically, for each chain of $C$'s superclasses there is
+an external object
 \begin{prog}
   const union $A$__vtu_$i$ $C$__vtable_$i$;
 \end{prog}
@@ -595,7 +589,7 @@ or a standard message which takes keyword arguments, defined as
                     @<type>_n @<arg>_n?                       \+\\
                   @<type>_{n+1} @<kw>_{n+1} @[= @<dflt>_{n+1}@],
                     $\ldots$,
-                    @<type>_m @<kw>_m @[= @<dflt>_m@]);
+                    @<type>_{n'} @<kw>_{n'} @[= @<dflt>_{n'}@]);
 \end{prog}
 two entry points are defined: the usual `main' entry point which accepts a
 variable number of arguments, and a `valist' entry point which accepts an
