On Mon, 7 Jan 2019 19:24:53 +0100 Jonas Maebe <jo...@freepascal.org> wrote:
> On 07/01/19 17:32, Mattias Gaertner via fpc-devel wrote: > > True, reason is that *non* static means there is a Self. > > But since there is no "object of objecttype" and no "record of > > recordtype", there is no type for Self in class methods of > > objects/record. > > 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; end; class procedure TBird.DoIt; var o: TBird; begin o:=Self; // Error: Incompatible types: got "Class Of TBird" expected "TBird" end; But "Class Of TBird" does not exist in FPC, does it? > It is not possible to declare a non-static class method (in FPC, at > least; Kylix does not support "advanced records", so I cannot test > there). Mattias _______________________________________________ fpc-devel maillist - fpc-devel@lists.freepascal.org http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel