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
_______________________________________________
fpc-devel maillist  -  [email protected]
http://lists.freepascal.org/mailman/listinfo/fpc-devel

Reply via email to