gh-152708: Fix AST generation asymmetry for unary positive in match statements#152712
Open
Twix1288 wants to merge 3 commits into
Open
gh-152708: Fix AST generation asymmetry for unary positive in match statements#152712Twix1288 wants to merge 3 commits into
Twix1288 wants to merge 3 commits into
Conversation
|
Most changes to Python require a NEWS entry. Add one using the blurb_it web app or the blurb command-line tool. If this change has little impact on Python users, wait for a maintainer to apply the |
1 similar comment
|
Most changes to Python require a NEWS entry. Add one using the blurb_it web app or the blurb command-line tool. If this change has little impact on Python users, wait for a maintainer to apply the |
a3d05fc to
fe42b12
Compare
fe42b12 to
6a7d2f2
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 fixes an asymmetry in AST generation where a unary positive in a pattern match expression (e.g.,
case +0:) was parsed directly as aConstant(implicitly dropping the+sign), whereas a unary negative (e.g.,case -0:) correctly generated aUnaryOp(USub, Constant). This led to round-trip parsing inconsistencies withast.unparse.Changes:
Grammar/python.gram: Updated the rules forsigned_number,signed_real_number, andimaginary_numberto retain+prefixes as_PyAST_UnaryOp(UAdd, ...), restoring parity with-behavior.Python/ast.c: Refactored the AST pattern matching validatorensure_literal_negativeintoensure_literal_signedto permit bothUSubandUAddunary operations in literal matching.Python/ast_preprocess.c: Added support for foldingUAddoperations recursively withinfold_const_match_patternsso that the compiler optimizer correctly resolves unary additions to positive constants without triggering compiler validation syntax errors.Fixes #148566
case +0:pattern, which is inconsistent. #152708