mirror of https://github.com/python/cpython
gh-109120: Fix syntax error in handlinh of incorrect star expressions (#117444)
This commit is contained in:
parent
1d5479b236
commit
c97d3af239
|
@ -1013,6 +1013,7 @@ kwargs[asdl_seq*]:
|
||||||
starred_expression[expr_ty]:
|
starred_expression[expr_ty]:
|
||||||
| invalid_starred_expression
|
| invalid_starred_expression
|
||||||
| '*' a=expression { _PyAST_Starred(a, Load, EXTRA) }
|
| '*' a=expression { _PyAST_Starred(a, Load, EXTRA) }
|
||||||
|
| '*' { RAISE_SYNTAX_ERROR("Invalid star expression") }
|
||||||
|
|
||||||
kwarg_or_starred[KeywordOrStarred*]:
|
kwarg_or_starred[KeywordOrStarred*]:
|
||||||
| invalid_kwarg
|
| invalid_kwarg
|
||||||
|
@ -1133,8 +1134,8 @@ func_type_comment[Token*]:
|
||||||
|
|
||||||
# From here on, there are rules for invalid syntax with specialised error messages
|
# From here on, there are rules for invalid syntax with specialised error messages
|
||||||
invalid_arguments:
|
invalid_arguments:
|
||||||
| ((','.(starred_expression | ( assignment_expression | expression !':=') !'=')+ ',' kwargs) | kwargs) ',' b='*' {
|
| ((','.(starred_expression | ( assignment_expression | expression !':=') !'=')+ ',' kwargs) | kwargs) a=',' ','.(starred_expression !'=')+ {
|
||||||
RAISE_SYNTAX_ERROR_KNOWN_LOCATION(b, "iterable argument unpacking follows keyword argument unpacking") }
|
RAISE_SYNTAX_ERROR_STARTING_FROM(a, "iterable argument unpacking follows keyword argument unpacking") }
|
||||||
| a=expression b=for_if_clauses ',' [args | expression for_if_clauses] {
|
| a=expression b=for_if_clauses ',' [args | expression for_if_clauses] {
|
||||||
RAISE_SYNTAX_ERROR_KNOWN_RANGE(a, _PyPegen_get_last_comprehension_item(PyPegen_last_item(b, comprehension_ty)), "Generator expression must be parenthesized") }
|
RAISE_SYNTAX_ERROR_KNOWN_RANGE(a, _PyPegen_get_last_comprehension_item(PyPegen_last_item(b, comprehension_ty)), "Generator expression must be parenthesized") }
|
||||||
| a=NAME b='=' expression for_if_clauses {
|
| a=NAME b='=' expression for_if_clauses {
|
||||||
|
@ -1396,6 +1397,7 @@ invalid_kvpair:
|
||||||
| 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 ':'") }
|
||||||
invalid_starred_expression:
|
invalid_starred_expression:
|
||||||
| a='*' expression '=' b=expression { RAISE_SYNTAX_ERROR_KNOWN_RANGE(a, b, "cannot assign to iterable argument unpacking") }
|
| a='*' expression '=' b=expression { RAISE_SYNTAX_ERROR_KNOWN_RANGE(a, b, "cannot assign to iterable argument unpacking") }
|
||||||
|
|
||||||
invalid_replacement_field:
|
invalid_replacement_field:
|
||||||
| '{' a='=' { RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "f-string: valid expression required before '='") }
|
| '{' a='=' { RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "f-string: valid expression required before '='") }
|
||||||
| '{' a='!' { RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "f-string: valid expression required before '!'") }
|
| '{' a='!' { RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "f-string: valid expression required before '!'") }
|
||||||
|
|
|
@ -1911,22 +1911,22 @@ A[*(1:2)]
|
||||||
>>> A[*(1:2)]
|
>>> A[*(1:2)]
|
||||||
Traceback (most recent call last):
|
Traceback (most recent call last):
|
||||||
...
|
...
|
||||||
SyntaxError: invalid syntax
|
SyntaxError: Invalid star expression
|
||||||
>>> A[*(1:2)] = 1
|
>>> A[*(1:2)] = 1
|
||||||
Traceback (most recent call last):
|
Traceback (most recent call last):
|
||||||
...
|
...
|
||||||
SyntaxError: invalid syntax
|
SyntaxError: Invalid star expression
|
||||||
>>> del A[*(1:2)]
|
>>> del A[*(1:2)]
|
||||||
Traceback (most recent call last):
|
Traceback (most recent call last):
|
||||||
...
|
...
|
||||||
SyntaxError: invalid syntax
|
SyntaxError: Invalid star expression
|
||||||
|
|
||||||
A[*:] and A[:*]
|
A[*:] and A[:*]
|
||||||
|
|
||||||
>>> A[*:]
|
>>> A[*:]
|
||||||
Traceback (most recent call last):
|
Traceback (most recent call last):
|
||||||
...
|
...
|
||||||
SyntaxError: invalid syntax
|
SyntaxError: Invalid star expression
|
||||||
>>> A[:*]
|
>>> A[:*]
|
||||||
Traceback (most recent call last):
|
Traceback (most recent call last):
|
||||||
...
|
...
|
||||||
|
@ -1937,7 +1937,7 @@ A[*]
|
||||||
>>> A[*]
|
>>> A[*]
|
||||||
Traceback (most recent call last):
|
Traceback (most recent call last):
|
||||||
...
|
...
|
||||||
SyntaxError: invalid syntax
|
SyntaxError: Invalid star expression
|
||||||
|
|
||||||
A[**]
|
A[**]
|
||||||
|
|
||||||
|
@ -2081,11 +2081,23 @@ Invalid expressions in type scopes:
|
||||||
|
|
||||||
>>> f(**x, *)
|
>>> f(**x, *)
|
||||||
Traceback (most recent call last):
|
Traceback (most recent call last):
|
||||||
SyntaxError: iterable argument unpacking follows keyword argument unpacking
|
SyntaxError: Invalid star expression
|
||||||
|
|
||||||
>>> f(x, *:)
|
>>> f(x, *:)
|
||||||
Traceback (most recent call last):
|
Traceback (most recent call last):
|
||||||
SyntaxError: invalid syntax
|
SyntaxError: Invalid star expression
|
||||||
|
|
||||||
|
>>> f(x, *)
|
||||||
|
Traceback (most recent call last):
|
||||||
|
SyntaxError: Invalid star expression
|
||||||
|
|
||||||
|
>>> f(x = 5, *)
|
||||||
|
Traceback (most recent call last):
|
||||||
|
SyntaxError: Invalid star expression
|
||||||
|
|
||||||
|
>>> f(x = 5, *:)
|
||||||
|
Traceback (most recent call last):
|
||||||
|
SyntaxError: Invalid star expression
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import re
|
import re
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
Added handle of incorrect star expressions, e.g ``f(3, *)``. Patch by
|
||||||
|
Grigoryev Semyon
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue