Since I had was already working on generics I wanted to see if I could implement the inferred specializations like is available in Delphi. The current syntax is too verbose to be usable so this is a necessary improvement in my opinion.
Here’s a first draft which seems to be working. There’s probably other ways to do the inference (I don’t have Delphi to test there’s) but this what I did for now. The algorithm basically scans params in order of appearance and inserts unique non-repeating types. For example: (1,'string') = <Integer,String> (1,2,3,4,5,6) = <Integer> ('a','b') = <String> ('string',1) = <String,Integer> ('a',1,'b',2,'c') = <String,Integer> https://github.com/genericptr/freepascal/tree/generic_implicit {$mode objfpc} {$modeswitch implicitgenerics} program test; generic procedure DoThis<T>(msg:T); begin writeln('DoThis$1#1:',msg); end; generic procedure DoThis<T>(msg:T;param1:T); begin writeln('DoThis$1#2:',msg,' ',param1); end; generic procedure DoThis<T,U>(msg:T); begin writeln('DoThis$2#1:',msg); end; generic procedure DoThis<T,U>(msg:T;param1:U); begin writeln('DoThis$2#2:',msg,' ',param1); end; generic procedure DoThis<T,U>(msg:T;param1:U;param2:tobject); begin writeln('DoThis$2#3:',msg,' ',param1,' ',param2.classname); end; begin DoThis(1); // DoThis$1#1:1 DoThis(1,1); // DoThis$1#2:1 1 DoThis('a','a'); // DoThis$1#2:a a DoThis('a',1); // DoThis$2#2:a 1 DoThis('a',1,tobject.create); // DoThis$2#3:a 1 TObject end. Regards, Ryan Joseph _______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal