.
.\"----- Licensing notice ---------------------------------------------------
.\"
-.\" This file is part of the Sensble Object Design, an object system for C.
+.\" This file is part of the Sensible Object Design, an object system for C.
.\"
.\" SOD is free software; you can redistribute it and/or modify
-.\" it under the terms of the GNU General Public License as published by
-.\" the Free Software Foundation; either version 2 of the License, or
-.\" (at your option) any later version.
+.\" it under the terms of the GNU Library General Public License as
+.\" published by the Free Software Foundation; either version 2 of the
+.\" License, or (at your option) any later version.
.\"
.\" SOD is distributed in the hope that it will be useful,
.\" but WITHOUT ANY WARRANTY; without even the implied warranty of
.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-.\" GNU General Public License for more details.
+.\" GNU Library General Public License for more details.
.\"
-.\" You should have received a copy of the GNU General Public License
-.\" along with SOD; if not, write to the Free Software Foundation,
-.\" Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+.\" You should have received a copy of the GNU Library General Public
+.\" License along with SOD; if not, write to the Free
+.\" Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
+.\" MA 02111-1307, USA.
.
+.\" Highlight using terminal escapes, rather than overstriking.
.\"\X'tty: sgr 1'
+.
.\" String definitions and font selection.
.ie t \{\
. ds o \(bu
and
.B SodClass
is its own metaclass.
-It is not possible to define root classes because of circularities:
+It is not possible to define root classes in module files
+because of circularities:
.B SodObject
has
.B SodClass
-as its metaclass, and
+as its metaclass,
+and
.B SodClass
is a subclass of
.BR SodObject .
.IB a ;
.PP
for each of
-.IR C 's superclasses
+.IR C 's
+superclasses
.IR A
in the same chain in some (unimportant) order.
A `pointer to
.B ichain
must have as a prefix the
.B ichain
-for each superclass in the same chain, and
-each slot must be stored in exactly one place.
+for each superclass in the same chain,
+and each slot must be stored in exactly one place.
The layout of vtables doesn't have this second requirement:
it doesn't matter that there are
multiple method entry pointers
for the same effective method
as long as they all work correctly.
+Indeed, it's essential that they do,
+because each chain's method entry function
+will need to apply a different offset to the receiver pointer
+before invoking the effective method.
.PP
A vtable for a class
.I C
.fi
.PP
The outer layer is a
-.IP
.B union
.IB C __vtu_ h
-.PP
containing a member
.IP
.B struct
The metaclass
.I R
of
-.IR O .
+.I O
is then the
.I root metaclass
of
in the same chain as
.IR J .
Then, if there is currently no class pointer of type
-.I Q
+.IR Q ,
then add a member
.RS
.IP
.I A
defines any messages,
and there is currently no member
-.I a
+.IR a ,
then add a member
.RS
.IP