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

Reply via email to