[fpc-devel] comparing methods

Martin fpc at mfriebe.de
Thu Sep 10 17:54:29 CEST 2009


Mattias Gärtner wrote:
> Zitat von Michael Schnell <mschnell at lumino.de>:
>> 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".

Most interesting.
I also always sought @Instance.Method, returns a TMethod record (that is 
the address of the instance and the address of the Code).

But mor interesting: There a various mails/requests about: 
- overloading by result
- automatic extending a calculation to the type of the result AInteger 
:= AByte + AByte can cause an overflow, even though the result would 
have enough space

Every time the answer includes something like: The evaluation of an 
expression (rvalue) is done independent of the type of the variable to 
which it will be assigned (lvalue) .
A statement I do agree with 100%.
Therefore in "Int := Byte + Byte" the rvalue is calculated using bytes. 
And therefore an overload by result is not possible as when evaluating 
what to call, the type of the lvalue is unknown.

And now I am reading this mail, and unless I misunderstood something:
The result of @Instance.Method depends on the lvalue's type or the 
context? (assignment vs compare).

That seems to be in direct disagreement to the above statement?

Martin



More information about the fpc-devel mailing list