[fpc-devel] comparing methods

Mattias Gärtner nc-gaertnma at netcologne.de
Thu Sep 10 16:06:18 CEST 2009


Zitat von Vincent Snijders <vsnijders at vodafonevast.nl>:

> Jonas Maebe schreef:
>>
>> On 10 Sep 2009, at 14:01, Mattias Gärtner wrote:
>>
>>>>
>>>> Mattias Gärtner wrote:
>>>>> Can someone explain why in mode objfpc comparing methods only compares
>>>>> the address, but not the instance?
>>>>
>>>> Seems perfectly logical to me (@ = Address of, in this case "code
>>>> address", the code is the same for all instances of a class).
>>>
>>> OnClick:=@MyClick;
>>>
>>> The @ operator is more than "address of".
>>
>> The current behaviour has been there since svn revision 1, so it's  
>> quite old and established at least (and Delphi/TP-compatible, afaik).
>
> It is delphi compatible, not really intuitive, so I would welcome a  
> change in the objfpc mode.
>
> See:
> http://bugs.freepascal.org/view.php?id=9228
> http://bugs.freepascal.org/view.php?id=11868

To draw the whole picture:

var a,b: TNotifyEvent;

a=b         compares only Code, not Data
a=nil       compares only Data, not Code
Assigned(a) compares only Code, not Data
n.a.        compares both

I wonder how many programmers know this.

Even the FCL contains code, where this leads to wrong code.
More important: I don't know a place, where a=b and a=nil are used  
right. But I have seen a lot of code where it was used wrong.


Mattias




More information about the fpc-devel mailing list