[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