X-Git-Url: https://git.distorted.org.uk/~mdw/sod/blobdiff_plain/3dca7758421664a838c54b273bd9221f02072045..65aaa02c8b8a0226b13724934e12f4bd871cdc19:/lib/sod-structs.3 diff --git a/lib/sod-structs.3 b/lib/sod-structs.3 index 6aefc9d..a6c9db2 100644 --- a/lib/sod-structs.3 +++ b/lib/sod-structs.3 @@ -7,23 +7,26 @@ . .\"----- 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 @@ -192,11 +195,13 @@ has no direct superclasses, 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 . @@ -546,7 +551,8 @@ and this is followed by corresponding members .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 @@ -617,13 +623,17 @@ each .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 @@ -655,10 +665,8 @@ extern const union \fIC\fB__vtu_\fIh\fB \fIC\fB__vtable_\fIh\fB; .fi .PP The outer layer is a -.IP .B union .IB C __vtu_ h -.PP containing a member .IP .B struct @@ -718,7 +726,7 @@ of The metaclass .I R of -.IR O . +.I O is then the .I root metaclass of @@ -781,7 +789,7 @@ be the most specific superclass 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 @@ -825,7 +833,7 @@ If class .I A defines any messages, and there is currently no member -.I a +.IR a , then add a member .RS .IP