Skip to content

Support constant ranges in set literals: ['0'..'9']#309

Open
TetzkatLipHoka wants to merge 1 commit into
remobjects:masterfrom
TetzkatLipHoka:feature/set-range-literals
Open

Support constant ranges in set literals: ['0'..'9']#309
TetzkatLipHoka wants to merge 1 commit into
remobjects:masterfrom
TetzkatLipHoka:feature/set-range-literals

Conversation

@TetzkatLipHoka

Copy link
Copy Markdown

Set/array literals only accepted single elements; the common Pascal
notation with ranges failed to parse ('Closing square bracket
expected'):

if c in ['0'..'9'] then ...
if b in [1..5, 250..255] then ...
if f in [frBanana..frDate] then ...

ReadArray now expands constant '..' ranges into individual constant
elements while parsing. Rules match Delphi where applicable:

  • both bounds must be compile-time ordinal constants of the same family
    (char/char, integer/integer, or values of the identical enum type),
  • ranges can be mixed freely with single elements,
  • an inverted range ('z'..'a') contributes no elements,
  • a range spanning 256 or more values is rejected (a set cannot hold
    more), reported as a type mismatch.

Dynamic bounds stay unsupported (they would require runtime set
construction); the bounds must be constants, mirroring the previous
all-constant behaviour of set literals.

🤖 Generated with Claude Code

Set/array literals only accepted single elements; the common Pascal
notation with ranges failed to parse ('Closing square bracket
expected'):

  if c in ['0'..'9'] then ...
  if b in [1..5, 250..255] then ...
  if f in [frBanana..frDate] then ...

ReadArray now expands constant '..' ranges into individual constant
elements while parsing. Rules match Delphi where applicable:

- both bounds must be compile-time ordinal constants of the same family
  (char/char, integer/integer, or values of the identical enum type),
- ranges can be mixed freely with single elements,
- an inverted range ('z'..'a') contributes no elements,
- a range spanning 256 or more values is rejected (a set cannot hold
  more), reported as a type mismatch.

Dynamic bounds stay unsupported (they would require runtime set
construction); the bounds must be constants, mirroring the previous
all-constant behaviour of set literals.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant