[fpc-devel] Packages, Generics
florian at freepascal.org
Mon Sep 13 10:36:19 CEST 2010
> I don't know whether it is still the case but there was a time the 'is'
> operator relied on RTTI. So as soon as you have two different RTTI
> entries for, e.g., TMyList<integer> (which could happen if you compile
> with packages) the operator needs some 'repair'.
This is why FPC has specialize (to emphasis this): only class instances
having the same specialized generic type are considered being equal:
TList1 = specialize TList<Longint>;
TList2 = specialize TList<Longint>;
l1a,l1b : TList1;
l2 : TList2;
Only l1a and l1b are assignment compatible. This is like records or
classes are handled in pascal: even records with exactly the same fields
are not assignment compatible.
So generics in packages are a non issue for fpc: every package
specializes the generics created by the units contained in the package
as it is done currently by a program: the specialization and code
generation for all generics specialized by a program and its units is
done during compilation of the program. For packages, it is just done
during package compilation.
More information about the fpc-devel