[Lazarus] Weird object variables access [SOLVED] - Delphi mode bug!

Mattias Gaertner nc-gaertnma at netcologne.de
Wed Oct 25 13:41:43 CEST 2017


On Wed, 25 Oct 2017 13:05:57 +0200
Giuliano Colla via Lazarus <lazarus at lists.lazarus-ide.org> wrote:

>[...]
> With older Delphi's up to, I believe, Delphi 7 you have that:
> 
> 1) the syntax for the assignment of a procedural type is @ProcIdentifier 
> := whatever;

No. The Delphi syntax is "ProcIdentifier:=Proc" or
"ProcIdentifier:=@Proc".

The "@Some:=" means assign something to address of Some. Which is bogus.
I guess Delphi's auto dereference actually translates this to
@Some^:=. Still bogus, but valid bogus.

 
> 2) If whatever is a pointer, and ProcIdentifier is a Method, the data 
> field is left untouched
> 
> This made it possible, with some dirty tricks to build a proper method 
> procedural type.
> 
> In recent Delphi's (someone tested with X7, I did with X10)
> 
> 1) The syntax @ProcIdentifier := whatever is no more valid. It's no more 
> possible to assign a pointer to a method type without typecasting.

Good.

 
> 2) Assigning (with typecasting) a pointer to a method type will set the 
> data field to Nil.

True.

 
> This makes it impossible to use dirty tricks.

Huh? Delphi allows to typecast almost anything. At least it warns.

 
> Currently fpc in Delphi mode accepts the old syntax, but sets the data 
> field to Nil, thus creating a misleading inconsistency.


Mattias


More information about the Lazarus mailing list