> On Feb 18, 2021, at 3:07 PM, Sven Barth <pascaldra...@googlemail.com> wrote:
> 
>> So "class type method resolution" is what's missing? I never used the 
>> interface method resolution so I don't really understand this feature. What 
>> needs to happen as far as the compiler is concerned?
> 
> The problem is this: if you have a property with an interface type the 
> compiler can simply build the interface's VMT for this. However for classes 
> (or objects or records) the compiler needs to generate slightly different 
> thunks that fixup the correct Self value, especially if things are mixed 
> between the subclass and the container class.

Then this is the real challenge to implement a "default implements property" 
and something I know nothing about. :) The rest is pretty easy actually though.

> 
>> type
>>   TMyShape = class(TShape, ICircle)
>>     private
>>       m_circle: TCircle;
>>     protected
>>       procedure ICircle.Draw = Draw;
>>     public
>>       property circle: TCircle read m_circle implements ICircle;
>>   end;
> 
> Your specific example is rather useless, cause your interface only has a 
> single method that you redirect to the class' method thus you wouldn't need 
> to use interface delegation. But anyway, your code would generate a runtime 
> error, because your TMyShape.Draw would still be abstract.

Maybe it's a bad example but I'm trying to illustrate how method resolution 
could be used for overriding (or what ever it would be called in this context.

I know this isn't correct syntax but it's more of this direction:

procedure Draw =  ICircle.Draw;

TShape.Draw is resolved by ICircle.Draw, which is implemented via TCircle. It's 
quasi-overriding but the VMT table should point to m_circle.Draw so Draw could 
be called on TShape and get property resolved by the "implements ICircle" 
property. Hope that makes sense.

Regards,
        Ryan Joseph

_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Reply via email to