gh-94192: Fix error for dictionary literals with invalid expression as value. (#94304)

* Fix error for dictionary literals with invalid expression as value.

* Remove trailing whitespace
This commit is contained in:
wookie184 2022-06-26 19:42:47 +01:00 committed by GitHub
parent aedb5194d5
commit 8c237a7a71
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 525 additions and 449 deletions

View File

@ -1314,4 +1314,4 @@ invalid_kvpair:
| a=expression !(':') { | a=expression !(':') {
RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, a->lineno, a->end_col_offset - 1, a->end_lineno, -1, "':' expected after dictionary key") } RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, a->lineno, a->end_col_offset - 1, a->end_lineno, -1, "':' expected after dictionary key") }
| expression ':' a='*' bitwise_or { RAISE_SYNTAX_ERROR_STARTING_FROM(a, "cannot use a starred expression in a dictionary value") } | expression ':' a='*' bitwise_or { RAISE_SYNTAX_ERROR_STARTING_FROM(a, "cannot use a starred expression in a dictionary value") }
| expression a=':' {RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "expression expected after dictionary key and ':'") } | expression a=':' &('}'|',') {RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "expression expected after dictionary key and ':'") }

View File

@ -1265,12 +1265,22 @@ Incomplete dictionary literals
Traceback (most recent call last): Traceback (most recent call last):
SyntaxError: expression expected after dictionary key and ':' SyntaxError: expression expected after dictionary key and ':'
# Ensure that the error is not raise for syntax errors that happen after sets # Ensure that the error is not raised for syntax errors that happen after sets
>>> {1} $ >>> {1} $
Traceback (most recent call last): Traceback (most recent call last):
SyntaxError: invalid syntax SyntaxError: invalid syntax
# Ensure that the error is not raised for invalid expressions
>>> {1: 2, 3: foo(,), 4: 5}
Traceback (most recent call last):
SyntaxError: invalid syntax
>>> {1: $, 2: 3}
Traceback (most recent call last):
SyntaxError: invalid syntax
Specialized indentation errors: Specialized indentation errors:
>>> while condition: >>> while condition:

View File

@ -0,0 +1 @@
Fix error for dictionary literals with invalid expression as value.

959
Parser/parser.c generated

File diff suppressed because it is too large Load Diff