The actual invisible declaration of an object constructor is as follows:
constructor init(_vmt : pointer; _self : pointer ...);
Where _vmt is a pointer to the virtual method table for this object. This value is nil if a constructor is called within the object instance (such as calling an inherited constructor).
_self is either nil if the instance must be allocated dynamically (object is declared as pointer), or the address of the object instance if the object is declared as a normal object (stored in the data area) or if the object instance has already been allocated.
The allocated instance (if allocated via new) (self) is returned in the accumulator.
The declaration of a destructor is as follows:
destructor done(_vmt : pointer; _self : pointer ...);
Where _vmt is a pointer to the virtual method table for this object. This value is nil if a destructor is called within the object instance (such as calling an inherited constructor), or if the object instance is a variable and not a pointer.
_self is the address of the object instance.