[fpc-pascal] Feature announcement: implicit generic function specializations

Martin Frb lazarus at mfriebe.de
Sat Apr 23 00:42:14 CEST 2022


Possible one more / Though more of an optimization.

If the code has multiple
     Add(Int64(0), Int64(0));
then they will all use the same procedure (just break in the debugger 
and check the CRC).

But if  one specialization is explicit and the other implicit then 2 
identical (as far as I can tell with -al ) functions (with diff CRC) are 
created.

There is however a subtle difference in the generate asm.
The explicit specialization has comment for the source code
# [6] begin
...
# [7] Result := aArg1 + aArg2;
...

The implicit does not have those.
Actually I checked that a bit deeper. The comment occur in (and only in) 
the first specialization (implicit or explicit).
All other specialization are without comments for the source.



program Project1;
{$mode objfpc}
{$ModeSwitch ImplicitFunctionSpecialization }

generic function Add<T>(aArg1, aArg2: T): T;
begin
   Result := aArg1 + aArg2;
end;

begin
   specialize Add<Int64>(Int64(0), Int64(0));  // No Hint
   Add(Int64(0), Int64(0));
end.




More information about the fpc-pascal mailing list