X-Git-Url: https://git.distorted.org.uk/~mdw/sod/blobdiff_plain/34042b3558b28b85fa7155f7c7cd171239cbbaa3..ed3ce6c2352d76442b79badfbe08bc6ecde6934d:/doc/structures.tex?ds=sidebyside

diff --git a/doc/structures.tex b/doc/structures.tex
index d4690f8..242d199 100644
--- a/doc/structures.tex
+++ b/doc/structures.tex
@@ -30,8 +30,14 @@ classes and associated metadata.  Note that Sod's object system is very
 flexible and it's possible for an extension to define a new root class which
 works very differently from the standard @|SodObject| described here.
 
-The concrete types described in \xref{sec:structures.common} and
-\ref{sec:structures.root} are declared by the header file @|<sod/sod.h>|.
+The concrete types described in
+\xref[\instead{sections}]{sec:structures.common} and
+\ref{sec:structures.root} are declared by the header file
+@|<sod/sod.h>|.\footnote{%
+  This isn't completely true.  The @|SodObject| and @|SodClass| structures
+  are defined in a header called @|<sod/sod-base.h>|, which is generated by
+  the Sod translator; but @|<sod/sod.h>| includes @|<sod/sod-base.h>|, so you
+  can forget about this detail.} %
 The definitions described in \xref{sec:structures.layout} are defined in the
 header file generated by the containing module.
 
@@ -45,7 +51,7 @@ structure.
 Instance chains contain slots and vtable pointers, as described below.  All
 instances have the basic structure of a @|struct sod_instance|.
 
-\begin{describe}{type}[struct sod_instance]
+\begin{describe}{ty}[struct sod_instance]
     {struct sod_instance \{                                     \\ \ind
        const struct sod_vtable *_vt;                          \-\\
      \};}
@@ -57,7 +63,7 @@ instances have the basic structure of a @|struct sod_instance|.
   \end{description}
 \end{describe}
 
-\begin{describe}{type}[struct sod_vtable]
+\begin{describe}{ty}[struct sod_vtable]
     {struct sod_vtable \{                                       \\ \ind
        const SodClass *_class;                                  \\
        size_t _base;                                          \-\\
@@ -87,6 +93,12 @@ metaclass, and @|SodClass| is a subclass of @|SodObject|.  Extensions can
 define additional root classes, but this is tricky, and not really to be
 recommended.
 
+The class definitions shown in the synopses are intended to be informative,
+but are fictional and can't really work: these classes are really defined by
+Lisp code in the Sod translator, in order to deal with the circularities
+involved at the top of the class/metaclass graph (see
+\xref{sec:concepts.metaclasses.runtime}).
+
 
 \subsection{The SodObject class} \label{sec:structures.root.sodobject}
 
@@ -122,7 +134,7 @@ recommended.
     {[nick = obj, metaclass = SodClass,
       lisp_metaclass = sod_class]                               \\
      class SodObject \{                                         \\ \ind
-       void init(?);
+       void init(?);                                          \-\\
      \}}
 
   The @|SodObject| class defines no slots.  Because @|SodObject| has no
@@ -289,7 +301,7 @@ recommended.
   \end{description}
 \end{describe}
 
-\begin{describe}{type}[struct sod_chain]
+\begin{describe}{ty}[struct sod_chain]
     {struct sod_chain \{                                        \\ \ind
        size_t n_classes;                                        \\
        const SodClass *const *classes;                          \\
