I hope you're all having a lovely Coronavirus lockdown-vacation and keeping 
safe. :)

I finally got around to the overhaul of {$modeswitch 
implicitfunctionspecialization} as according to feedback in this thread. I 
attached a patch in the bug tracker which should apply without conflicts. In 
particular, Mattias, if you remember any of this please re-test and see if it 
works better now (I didn't include any tests yet). As for Sven I've left my 
design notes for you to review. I think I did what you wanted and the 
overloading works correctly now.


from the bug tracker:

====================

https://bugs.freepascal.org/view.php?id=35261

I've done an overhaul on the previous design so I'm posting a patch which is a 
draft version (with debug writeln's as placeholders for proper error messages). 
If the design is sane I will clean everything up and probably inline some 
functions.

1) the entire inference process is redone according to feedback (see 
try_implicit_specialization).
   - array types and function pointers can be used for specialization.
   - templates can appear in any order now DoThis<T,U>(a: U; b: T);
2) as was requested by Sven the dummy syms are now valid procsyms and are 
passed along to tcallcandiates for overloading.
3) The inference is done at one location in do_proc_call but we could possibly 
move that inside tcallnode.pass_typecheck if it were better for some reason.
4) I added a tprocsym.add_generic_candiate to associate procsyms with dummy 
procsyms but I wasn't sure if this was good design so it's not cpu compliment 
and thus specialization from units will fail.
5) non-generic overloads are filtered in htypechk.is_better_candidate but I 
don't feel like I integrated my check in the right place due to me not really 
understanding that function.

Regards,
        Ryan Joseph

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

Reply via email to