From 9c4a4110967f8bc36cb8806a4aac63562082d8fe Mon Sep 17 00:00:00 2001 From: Mark Wooding Date: Thu, 17 Sep 2015 18:24:26 +0100 Subject: [PATCH] lib/sod-structs.3: Some clarifications and typesetting fixes. --- lib/sod-structs.3 | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/lib/sod-structs.3 b/lib/sod-structs.3 index 6aefc9d..bc181ee 100644 --- a/lib/sod-structs.3 +++ b/lib/sod-structs.3 @@ -192,11 +192,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 +548,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 +620,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 +662,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 +723,7 @@ of The metaclass .I R of -.IR O . +.I O is then the .I root metaclass of @@ -781,7 +786,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 +830,7 @@ If class .I A defines any messages, and there is currently no member -.I a +.IR a , then add a member .RS .IP -- 2.11.0