[fpc-devel] Failure to recompile TAChart after FPC r40785 (committed by Jonas)
jonas at freepascal.org
Mon Jan 7 20:36:06 CET 2019
On 07/01/19 20:12, Mattias Gaertner via fpc-devel wrote:
> On Mon, 7 Jan 2019 19:24:53 +0100
> Jonas Maebe <jonas at freepascal.org> wrote:
>> Object class methods do have a self parameter. If an object has a
>> vmt, the object class methods get this vmt pointer passed as self
>> parameter. Otherwise they get nil as self parameter. Kylix does not
>> support calling object class methods through tobjecttype.classmethod
>> either, which is indeed kind of strange.
> Thanks. I learned something new.
> But what is this Self?
> TBird = object
> class procedure DoIt; virtual;
> class procedure TBird.DoIt;
> o: TBird;
> // Error: Incompatible types: got "Class Of TBird" expected "TBird"
> But "Class Of TBird" does not exist in FPC, does it?
No, it does not. The compiler currently unconditionally creates a
classrefdef for the self parameter, regardless of whether it's a class
or object type. This should probably changed into void pointer for
objects. Although even Kylix prints "Error: Incompatible types: "TBird"
and "Class Reference", so it seems we're also Delphi-compatible here :)
More information about the fpc-devel