[fpc-pascal] Constants in generics
Ryan Joseph
ryan at thealchemistguild.com
Tue Jan 8 20:31:16 CET 2019
I’ve made constants respect their proper definition now so we can do range checking but this broke some other things. For example there’s a range check error with static arrays now because “U” has a value of 0 so 0-1 = -1:
type
generic TList<const U:byte> = record
list: array[0..U-1] of integer; // ERROR: high value < low value (0..-1)
end;
There’s a couple ways to resolve this:
1) Add some extra flags to nodes/syms so “U-1” can be known to contain a generic parameter and errors can be ignored. That’s the most complicated solution and I wasn’t able to figure that out easily because flags need to be transferred in multiple locations.
2) The easy solution is to add another tdef member to tconstsym which can be used for range checking in generics and let the tconstsym.typedef def be undefined like it used to be (which fixes the above bug and perhaps others). This means another def needs to be added to the PPU write/read system though.
3) Be lazy and don’t do range checking. :)
Any idea about this?
Regards,
Ryan Joseph
More information about the fpc-pascal
mailing list