Re: [fpc-pascal] Helpers: Implementation Location influencing the result

2013-10-06 Thread Sven Barth

On 06.10.2013 01:46, Daniel Gaspary wrote:

On Sat, Oct 5, 2013 at 8:27 PM, Sven Barth pascaldra...@googlemail.com wrote:

At location A the helper is not yet declared, thus GetAnotherString uses the
GetString function of its own class. On location B the helper is already
declared and thus the implementation of GetAnotherString will pick up the
helper's GetString function instead.


I believed that the location that matters, in this case,  was only the
object instantiation (program/implementation body), because it was, in
both cases, after the helper declaration. A little weird.


No. Whenever you call a method (either inside a class using (implicit) 
Self or outside using a variable) the compiler checks whether a helper 
for that type is in scope and uses that if it is. It has nothing to do 
with object instantiation (that would be more for Traits/Mixins: 
http://en.wikipedia.org/wiki/Trait_%28computer_programming%29 ).


Regards,
Sven

___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] Helpers: Implementation Location influencing the result

2013-10-06 Thread Daniel Gaspary
On Sun, Oct 6, 2013 at 8:09 AM, Sven Barth pascaldra...@googlemail.com wrote:
 No. Whenever you call a method (either inside a class using (implicit) Self
 or outside using a variable) the compiler checks whether a helper for that
 type is in scope and uses that if it is. It has nothing to do with object
 instantiation (that would be more for Traits/Mixins:
 http://en.wikipedia.org/wiki/Trait_%28computer_programming%29 ).


Thank you, Sven.
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal


[fpc-pascal] Helpers: Implementation Location influencing the result

2013-10-05 Thread Daniel Gaspary
I have created an example to show the different results I got due to
where the implementation of a object is .

The code is at http://pastebin.com/wY2qmZFm

If you cut and paste the code block at Location A to the Location
B the result of the program changes.

At Location A the method of the helper is used. At Location B it is not.

My questions are

Is this right?

Why?


Thank you.
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] Helpers: Implementation Location influencing the result

2013-10-05 Thread Sven Barth
Am 05.10.2013 22:57 schrieb Daniel Gaspary dgasp...@gmail.com:

 I have created an example to show the different results I got due to
 where the implementation of a object is .

 The code is at http://pastebin.com/wY2qmZFm

 If you cut and paste the code block at Location A to the Location
 B the result of the program changes.

 At Location A the method of the helper is used. At Location B it is not.

 My questions are

 Is this right?

Yes.

 Why?

At location A the helper is not yet declared, thus GetAnotherString uses
the GetString function of its own class. On location B the helper is
already declared and thus the implementation of GetAnotherString will pick
up the helper's GetString function instead.

As normally helpers aren't declared in the same unit as their extended type
this isn't necessarily that obvious. ;)

Regards,
Sven
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal

Re: [fpc-pascal] Helpers: Implementation Location influencing the result

2013-10-05 Thread Daniel Gaspary
On Sat, Oct 5, 2013 at 8:27 PM, Sven Barth pascaldra...@googlemail.com wrote:
 At location A the helper is not yet declared, thus GetAnotherString uses the
 GetString function of its own class. On location B the helper is already
 declared and thus the implementation of GetAnotherString will pick up the
 helper's GetString function instead.

I believed that the location that matters, in this case,  was only the
object instantiation (program/implementation body), because it was, in
both cases, after the helper declaration. A little weird.


Thanks, Sven.
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal