[fpc-devel] Typed constants

Sven Barth pascaldragon at googlemail.com
Mon Mar 18 07:54:10 CET 2019


Ryan Joseph <ryan at thealchemistguild.com> schrieb am Mo., 18. März 2019,
00:50:

> I just realized that typed constants exist and may need to be supported as
> constants for generics but I’ve never used them myself (not sure when they
> were introduced).
>
> First test gives an error so it makes me wonder if they’re buggy and
> should be allowed for generics. Should they?
>
> const
>   kInt: integer = 100;
>
> var
>   i: integer = kInt;    // ERROR: Illegal expression
>
> They don’t work for generics right now either because they appear as a
> load node and are not discernible from a variable. Not even sure how to
> know if a load node is a typed const or what these things really are.


This is by design. Typed constants are essentially read only variables (in
TP times they were writable by default, nowadays that can be controlled
with $J) and thus they behave differently to untyped constants and can't be
used as initializers for other constants or variables or as default
parameters.
That's also why I said to restrict generic const parameters to those for
which a const node exists, cause those are true constants.
So as for now you definitely don't need to support typed constants, they
need to be rejected. We can always add support later, but we should first
get a feel how generics with constants behave and how they're used before
we open that can of worms.

Regards,
Sven
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freepascal.org/pipermail/fpc-devel/attachments/20190318/32cd34e5/attachment.html>


More information about the fpc-devel mailing list