[fpc-devel] Implicit function specialization precedence

Sven Barth pascaldragon at googlemail.com
Sat Apr 10 14:54:29 CEST 2021

Am 10.04.2021 um 10:38 schrieb Sven Barth:
> Am 10.04.2021 um 00:43 schrieb Ryan Joseph via fpc-devel:
>>> On Apr 9, 2021, at 4:31 PM, Sven Barth via fpc-devel 
>>> <fpc-devel at lists.freepascal.org> wrote:
>>> You mean what you did for is_array_literal? A pure array constructor 
>>> can be found with is_array_constructor, though it might be better to 
>>> use is_open_array, cause someone might pass an open array parameter 
>>> to a generic function (those will be unnamed as well).
>> Maybe the email didn't go through? How to identify this "array of 
>> const constructor" type. I want to reject these for implicit 
>> specialization but I can't identity them.
>>   DoThis([
>>     1,
>>     'string',
>>     'c',
>>     TObject.Create
>>   ])
> You can't really differentiate these from array constructors with just 
> one type, because the type is only really determined once the overload 
> is chosen as that kind of array could be an array of const, an array 
> of Variant or maybe even an array of LongInt if there are suitable 
> operator overloads in scope. So, yeah, it's kinda hard to decide what 
> type to use...

*Now* your other mail arrived. ;)

As an additional note: if you take a look at 
tarrayconstructornode.pass_typecheck you can see that the array type 
always has the ado_IsConstructor set and if it contains of incompatible 
types the ado_IsVariant is set as well. So if ado_IsVariant is *not* 
set, then you can rely on the elementdef of the arraydef.


More information about the fpc-devel mailing list