On Sun, 8 May 2022, Hairy Pixels via fpc-devel wrote:

Basically it looks like multi helpers don’t actually work with overloaded 
methods and simply choses the last helper declared. Should I fix this? Seems 
unlikely we would not notice this before but maybe we did.

{$modeswitch typehelpers}
{$modeswitch multihelpers}

type
 TMyHelper1 = type helper for integer
   procedure DoThis(f: integer);
 end;
 TMyHelper2 = type helper for integer
   procedure DoThis(f: string);
 end;

procedure TMyHelper1.DoThis(f: integer);
begin
 writeln(self, ' => ', f);
end;

procedure TMyHelper2.DoThis(f: string);
begin
 writeln(self, ' => ', f);
end;

var
 i: integer = 0;
begin
 i.DoThis(0);  // Got "ShortInt", expected “ShortString"

If you fix this, then I think you should make sure it is only done when the
overload; keyword is present. For regular classes, searching for an overload match stops also at the current class (? unit) if the overload keyword is not present.

Michael.
_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel

Reply via email to