Reset parser context in parenthesized expression #10994
Merged
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.
Summary
This PR fixes the bug where the parser would fail to parse the following code:
This is because when parsing the target of a
for
statement, the context flag for the parser is set toFOR_TARGET
and this is used by binary expression parsing to stop the expression parsing when it sees thein
keyword. But, in parenthesized context, this is allowed.The solution implemented in this PR is to reset the parser context when parsing a parenthesized expression and set it back to the original context later.
An alternative solution would be to introduce
ExpressionContext
but that would require a lot of updates as almost all of expression parsing function would need to be updated to take this context. A benefit of this would be that bothAllowStarredExpression
andAllowNamedExpression
can be merged in the context and everything aroundParserCtxFlags
can be removed. It could possibly also simplify certain parsing functions.Test Plan
Add test cases and verified the snapshots.