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@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.
Regards,
Sven
_______________________________________________
fpc-devel maillist - fpc-devel@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel