[fpc-devel] comparing methods

Ivo Steinmann ivo_steinmann at gmx.net
Thu Sep 10 17:12:21 CEST 2009


Mattias Gärtner schrieb:
> 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
>
> _______________________________________________
> fpc-devel maillist  -  fpc-devel at lists.freepascal.org
> http://lists.freepascal.org/mailman/listinfo/fpc-devel
>
if that's true, then it's the biggest crap I ever heard ;) it must be 
fixed ....    i'm using those kind of compares all over the place, but I 
never noticed this difference.

1. Using =nil or Assigned should result in the same.
2. a=b comparing only code is ok



More information about the fpc-devel mailing list