Implement is not and not in operators - #454
Merged
Merged
Conversation
Closed
2 tasks
fourls
requested changes
Aug 12, 2026
Delphi treats a non-constant `{$IF}` condition expression as true, but
we were treating every unevaluable expression as false.
Unevaluable expressions now come in 2 flavors:
- `UNKNOWN` for badly-formed expressions or unresolvable references.
Evaluates to false.
- `NON_CONSTANT` for well-formed non-constant expressions.
Evaluates to true.
String ordering comparisons like `'foo' > 'bar'` previously evaluated to an UNKNOWN expression in preprocessor directive expressions.
In terms of parsing, operator precedence, and type resolution, this wasn't a difficult implementation. There were other challenges. "Compound" operators with multiple tokens make previous AST modeling of binary and unary expression nodes a little tricky. The operators in these expressions are now modeled as their own typed child nodes. This required me to build binary expressions a little differently, which made me drop the `resetBinaryExpressionTokens` fix introduced in 041a0d9. In doing so, I had to wrestle with node text range calculation for (probably) the 27th time. The new shape seems to work well.
cirras
force-pushed
the
delphi-13-operators
branch
from
August 13, 2026 04:26
4eecf1d to
d933342
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR implements the new binary operators added in Delphi 13.
In terms of parsing, operator precedence, and type resolution, this wasn't a difficult implementation. There were other challenges.
"Compound" operators with multiple tokens make previous AST modeling of binary and unary expression nodes a little tricky. The operators in these expressions are now modeled as their own typed child nodes.
This required me to build binary expressions a little differently, which made me drop the
resetBinaryExpressionTokensfix introduced in 041a0d9. In doing so, I had to wrestle with node text range calculation for (probably) the 27th time. The new shape seems to work well.Closes #408, #409.