[fpc-pascal] modeswitch multihelpers precedence problem

Michael Van Canneyt michael at freepascal.org
Tue Mar 10 08:37:34 CET 2020



On Tue, 10 Mar 2020, Ryan Joseph via fpc-pascal wrote:

>
>
>> On Mar 10, 2020, at 11:57 AM, Anthony Walter via fpc-pascal <fpc-pascal at lists.freepascal.org> wrote:
>> 
>> To demonstrate, if I have MyUnit.pas that defines a string type helper with EndsWith() and an IntToStr() function then consider the following code:
>> 
>> program Test;
>> 
>> uses
>>   MyUnit, SysUtils;
>> 
>> begin
>>   'hello'.EndsWith('lo'); // invokes MyUnit.TStringHelper.EndsWith()
>>   IntToStr(12); // invokes SysUtils.IntToStr()
>> end.
>> 
>
> I think the problem here may be because SysUtils doesn't enable the mode
> switch.  In that example above I would expect EndsWith to be used from the
> last unit, that is SysUtils.  If you remake the example without SysUtils
> and define the type helpers in 2 units that both enable multihelpers  does
> it work correctly?

In that case the mode switch would be wrong. As a developer of a type helper, 
you should not have to care about this: you just define a type helper. You
should not have to say 'I will allow this type helper to be used with other
type helpers'; That should always be so.

I imagine that the type helper is meant for the person wanting to use multiple 
type helpers: it says to the compiler 'please look for more type helpers'.

Michael.


More information about the fpc-pascal mailing list