(usually) change its direct class, and the direct class of an object is not
affected by, for example, the static type of a pointer to it.
+
\subsection{Superclasses and inheritance}
\label{sec:concepts.classes.inherit}
then all the superclasses of $C$ must have distinct nicknames.
\end{itemize}
+
\subsection{Slots} \label{sec:concepts.classes.slots}
Each class defines a number of \emph{slots}. Much like a structure member, a
implementation of C89. Initializers will be evaluated once each time an
instance is initialized.
+
\subsection{C language integration} \label{sec:concepts.classes.c}
For each class~$C$, the Sod translator defines a C type, the \emph{class
method defined for a class $C$, the variable @|me|, of type pointer to class
type of $C$, refers to the receiving object.
+
\subsection{Effective methods and method combinations}
\label{sec:concepts.methods.combination}
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]
\xref{fig:structures.root.sodobject}.
\end{describe}
+
\subsection{The SodClass class} \label{sec:structures.root.sodclass}
\begin{describe}[SodClass]{cls}
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.layout.additional}
In addition to the instance and vtable structures described above, the
All of these have their usual C meanings.
\subsubsection{Declarators} \label{sec:syntax.c-types.declarator}
-
\begin{grammar}
<declarator>$[k]$ ::= @<pointer>^* <primary-declarator>$[k]$
\end{grammar}
\subsubsection{Forward declarations} \label{sec:class.class.forward}
-
\begin{grammar}
<class-forward-declaration> ::= "class" <identifier> ";"
\end{grammar}
<method-body> ::= "{" <c-fragment> "}" | "extern" ";"
\end{grammar}
-
%%%----- That's all, folks --------------------------------------------------
%%% Local variables: