define additional root classes, but this is tricky, and not really to be
recommended.
+
\subsection{The SodObject class} \label{sec:structures.root.sodobject}
\begin{figure}[tbp]
union \{ \\ \ind
struct SodObject__ichain_obj \{ \\ \ind
const struct SodObject__vt_obj *_vt; \- \\
- \}; \- \\
+ \} obj; \- \\
\} obj; \- \\
\};
\end{prog}
\xref{fig:structures.root.sodobject}.
\end{describe}
+
\subsection{The SodClass class} \label{sec:structures.root.sodclass}
\begin{describe}[SodClass]{cls}
size_t ichainsz; \- \\
\};}
- The @|struct sod_chain| structure describes an individual chain of
- superclasses. It has the following members.
- \begin{description} \let\makelabel\code
+ The @|struct sod_chain| structure describes an individual chain of
+ superclasses. It has the following members.
+ \begin{description} \let\makelabel\code
- \item[n_classes] The number of classes in the chain. This is always at
- least one.
+ \item[n_classes] The number of classes in the chain. This is always at
+ least one.
- \item[classes] A pointer to an array of class pointers listing the classes
- in the chain from least- to most-specific. So
- $@<classes>[i]@->@|cls|.@|head| = @<classes>[0]$ for all $0 \le i <
- @<n_classes>$, $@<classes>[0]@->@|cls|.@|link|$ is always null, and
- $@<classes>[i]@->@|cls|.@|link| = @<classes>[i - 1]$ if $1 \le i <
- @<n_classes>$.
+ \item[classes] A pointer to an array of class pointers listing the classes
+ in the chain from least- to most-specific. So
+ $@<classes>[i]@->@|cls|.@|head| = @<classes>[0]$ for all $0 \le i <
+ @<n_classes>$, $@<classes>[0]@->@|cls|.@|link|$ is always null, and
+ $@<classes>[i]@->@|cls|.@|link| = @<classes>[i - 1]$ if $1 \le i <
+ @<n_classes>$.
- \item[off_ichain] The size of the @|ichain| structure for this chain.
+ \item[off_ichain] The size of the @|ichain| structure for this chain.
- \item[vt] The vtable for this chain. (It is possible, therefore, to
- partially duplicate the behaviour of the @<imprint> function by walking
- the chain structure.\footnote{%
- There isn't enough information readily available to fill in the class
- pointers correctly.} %
- The @<imprint> function is much faster, though.)
+ \item[vt] The vtable for this chain. (It is possible, therefore, to
+ partially duplicate the behaviour of the @<imprint> function by walking
+ the chain structure.\footnote{%
+ There isn't enough information readily available to fill in the class
+ pointers correctly.} %
+ The @<imprint> function is much faster, though.)
- \item[ichainsz] The size of the @|ichain| structure for this chain.
+ \item[ichainsz] The size of the @|ichain| structure for this chain.
- \end{description}
- \end{describe}
+ \end{description}
+\end{describe}
%%%--------------------------------------------------------------------------
\section{Class and vtable layout} \label{sec:structures.layout}
while the corresponding lowercase letters indicate the class nicknames.
Throughout, we consider a class $C$ (therefore with nickname $c$).
+
\subsection{Generic instance structure}
\label{sec:structures.layout.instance}
Finally, the @|islots| structure simply contains one member for each slot
defined by $C$ in the order they appear in the class definition.
+
\subsection{Generic vtable structure} \label{sec:structures.layout.vtable}
As described above, each @|ichain| structure of an instance's storage has a
@<type>_n @<arg>_n, va_list sod__ap);
\end{prog}
-\subsection{Additional definitions} \label{sec:structures.additional}
+
+\subsection{Additional definitions} \label{sec:structures.layout.additional}
In addition to the instance and vtable structures described above, the
following definitions are made for each class $C$.