Instance chains contain slots and vtable pointers, as described below. All
instances have the basic structure of a @|struct sod_instance|.
Instance chains contain slots and vtable pointers, as described below. All
instances have the basic structure of a @|struct sod_instance|.
{[nick = obj, metaclass = SodClass,
lisp_metaclass = sod_class] \\
class SodObject \{ \\ \ind
{[nick = obj, metaclass = SodClass,
lisp_metaclass = sod_class] \\
class SodObject \{ \\ \ind
Initialize a newly allocated instance.
This message uses a custom method combination which works like the
Initialize a newly allocated instance.
This message uses a custom method combination which works like the
Teardown an instance which is no longer required.
The message returns an integer flag. A zero value means that the
Teardown an instance which is no longer required.
The message returns an integer flag. A zero value means that the
{[nick = cls, link = SodObject] \\
class SodClass: SodObject \{ \\ \ind
const char *name; \\
{[nick = cls, link = SodObject] \\
class SodClass: SodObject \{ \\ \ind
const char *name; \\
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
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.
+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.
This is mostly an irrelevant detail, whose purpose is to defend against
malicious compilers: pointers are always to one of the inner @|vt|
This is mostly an irrelevant detail, whose purpose is to defend against
malicious compilers: pointers are always to one of the inner @|vt|
-structures. It's important only because it's the outer @|vtu| union which is
-exported by name. Specifically, for each chain of $C$'s superclasses there is
-an external object
+structures. It's important only because it's the outer @|vtu| union which is
+exported by name. Specifically, for each chain of $C$'s superclasses there
+is an external object