The actual invisible declaration of a class constructor is as follows:
constructor init(_vmt: pointer; flag : longint; ..);
_vmt is either nil if called from the instance or if calling an inherited constructor, otherwise it points to the address of the virtual method table.
Where flag is zero if the constructor is called within the object instance or with an instance qualifier otherwise this flag is set to one.
The allocated instance (self) is returned in the accumulator.
The declaration of a destructor is as follows:
destructor done(_self : pointer; flag : longint ...);
_self is the address of the object instance.
flag is zero if the destructor is called within the object instance or with an instance qualifier otherwise this flag is set to one.