X-Git-Url: https://git.distorted.org.uk/~mdw/sod/blobdiff_plain/9a9a7b35fe696f7dfe041935bf41e89558930aee..6afec9101d5ea87e3df4bda2239ffd05f8154fa6:/lib/sod-structs.3 diff --git a/lib/sod-structs.3 b/lib/sod-structs.3 index 48364cc..161fc4e 100644 --- a/lib/sod-structs.3 +++ b/lib/sod-structs.3 @@ -705,7 +705,7 @@ 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, +Indeed, it's essential that there are multiple entry pointers, because each chain's method entry function will need to apply a different offset to the receiver pointer before invoking the effective method. @@ -1114,6 +1114,12 @@ Finally, the class object is defined as .B #define .IB C __class .BI (& C __classobj. j . r ) +.br +.B #define +.IB C __cls_ k +.BI (& C __classobj. k . n ) +.br +\&... .PP The exported symbol .IB C __classobj @@ -1132,7 +1138,32 @@ is the root metaclass of i.e., the metaclass of the least specific superclass of .IR C ; usually this is -.BR "const SodClass *" . +.BR "const SodClass\ *" . +For each chain of +.IR C 's +metaclass, a macro +.IB C __cls_ k +is defined, usable as a pointer of type +.B const +.IR N \ \c +.BR * , +where +.I K +and +.I N +are the chain's head and tail classes +(i.e., the least- and most-specific classes in the chain) +respectively; +this macro is +.I omitted +if +.IR N "\ =\ " R , +i.e., in the common case where +.IR C 's +metaclass is precisely the root metaclass, +since the existing +.IB C __class +macro is already sufficient. . .\"-------------------------------------------------------------------------- .SH SEE ALSO