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|. @_n @_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 @_n @_n? \+\\ @_{n+1} @_{n+1} @[= @_{n+1}@], $\ldots$, - @_m @_m @[= @_m@]); + @_{n'} @_{n'} @[= @_{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