On 19/10/2025 17:33, Hairy Pixels via fpc-devel wrote:
On Oct 19, 2025 at 10:27:50 PM, Martin Frb via fpc-devel
<[email protected]> wrote:
Given an non-constrained param, then (in code) any member is assumed to
be ok.
But in declarations, members of the param can only be used if the
compiler knows them.
generic TGenA<T1,T2> = class
X: T1;
Y: T2.unknown;
end;
What reason may there be to reject the line for Y?
I agree the compiler can not know that T2.unknown is a valid member
before specializing so it should be valid syntax.
I think it's just a limitation in the parser. Ideally some subset of
typeless syntax should be allowed during the initial parse and only
only validated once the the type is specialized.
Well, yes, it may be unimplemented in the parser... And maybe that is
all of it.
Maybe historically it would have been a complex task to add. Yet,
currently it would seem to be that the parser just needs to skip any
amount of "dot identifier"?
I though, if it may be some internal representation (nodes) generated by
the parser, that must later (at specialization) match. But then I can
have the base class
{advanced records}
TClassA = class
public type record
public type TUnknown: record end;
end;
end;
and replace it by
TClassA = class
public type class
public type TUnknown: byte;
end;
end;
which surely generates something different?
But then, of course I don't know the compiler internals...
So hence I am asking..._______________________________________________
fpc-devel maillist - [email protected]
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel