[fpc-devel] Optimization for TObject.InheritsFrom (and the 'is' operator)
Jonas Maebe
jonas.maebe at elis.ugent.be
Sat Jul 21 15:37:11 CEST 2007
On 21 Jul 2007, at 15:06, Jonas Maebe wrote:
>> InheritsFrom := (AClass <= Self) and (Self < PClass(pointer
>> (AClass) + vmtNextSibling)^);
>>
>> (In this implementation vmtNextSibling should not be nil for those
>> classes that have no NextSibling in the hierarchy, but have a
>> value larger than all vmts. An alternative is to have an
>> vmtLastChild, which is always properly defined; it points to the
>> last one of: itself, its children, its grandchildren, etc.)
>
> I don't think this can work, since a class hierarchy is a tree and
> not a list. So in case of
>
> TObject
> |
> +-- TA
> |
> +-- TB
>
> How would you linearise that in memory? As TObject - TA - TB ?
>
> In that case, TB inherirtsFrom TA would be (afaics)
>
> (TA <= TB) and (TB < TA+(inf))
Sorry, no, this would be (TA <= TB) and (TB < TB), so it would be ok.
Still, I don't think laying out classes in memory like this is easy
to do without complex linker scripts (which are not supported on all
platforms).
Jonas
More information about the fpc-devel
mailing list