Skip to content

Commit 4f2cb72

Browse files
committed
Fix error for augassign
1 parent b596bba commit 4f2cb72

File tree

5 files changed

+26
-19
lines changed

5 files changed

+26
-19
lines changed

Grammar/python.gram

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -641,20 +641,13 @@ invalid_assignment:
641641
| a=expression ':' expression ['=' annotated_rhs] {
642642
RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "illegal target for annotation") }
643643
| a=star_expressions '=' (yield_expr | star_expressions) {
644-
RAISE_SYNTAX_ERROR_KNOWN_LOCATION(
645-
_PyPegen_get_invalid_target(a),
646-
"cannot assign to %s", _PyPegen_get_expr_name(_PyPegen_get_invalid_target(a))
647-
)}
648-
| a=expression augassign (yield_expr | star_expressions) {
649-
RAISE_SYNTAX_ERROR_KNOWN_LOCATION(
650-
_PyPegen_get_invalid_target(a),
651-
"cannot assign to %s", _PyPegen_get_expr_name(_PyPegen_get_invalid_target(a))
652-
)}
644+
RAISE_SYNTAX_ERROR_KNOWN_LOCATION(
645+
_PyPegen_get_invalid_target(a),
646+
"cannot assign to %s", _PyPegen_get_expr_name(_PyPegen_get_invalid_target(a))) }
647+
| a=expression augassign (yield_expr | star_expressions) { _PyPegen_raise_syntax_error_for_augassign(p, a) }
653648
| a=star_expressions augassign (yield_expr | star_expressions) {
654-
RAISE_SYNTAX_ERROR_KNOWN_LOCATION(
655-
a,
656-
"illegal expression for augmented assignment"
657-
)}
649+
RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "illegal expression for augmented assignment") }
650+
658651
invalid_block:
659652
| NEWLINE !INDENT { RAISE_INDENTATION_ERROR("expected an indented block") }
660653
invalid_comprehension:

Lib/test/test_syntax.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -138,15 +138,15 @@
138138
139139
>>> a, b += 1, 2
140140
Traceback (most recent call last):
141-
SyntaxError: invalid syntax
141+
SyntaxError: illegal expression for augmented assignment
142142
143143
>>> (a, b) += 1, 2
144144
Traceback (most recent call last):
145-
SyntaxError: cannot assign to tuple
145+
SyntaxError: illegal expression for augmented assignment
146146
147147
>>> [a, b] += 1, 2
148148
Traceback (most recent call last):
149-
SyntaxError: cannot assign to list
149+
SyntaxError: illegal expression for augmented assignment
150150
151151
From compiler_complex_args():
152152

Parser/pegen/parse.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10878,7 +10878,7 @@ invalid_assignment_rule(Parser *p)
1087810878
(_tmp_129_var = _tmp_129_rule(p)) // yield_expr | star_expressions
1087910879
)
1088010880
{
10881-
_res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( _PyPegen_get_invalid_target ( a ) , "cannot assign to %s" , _PyPegen_get_expr_name ( _PyPegen_get_invalid_target ( a ) ) );
10881+
_res = _PyPegen_raise_syntax_error_for_augassign ( p , a );
1088210882
if (_res == NULL && PyErr_Occurred()) {
1088310883
p->error_indicator = 1;
1088410884
return NULL;

Parser/pegen/pegen.c

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2093,4 +2093,18 @@ _PyPegen_get_invalid_target(expr_ty e)
20932093
default:
20942094
return e;
20952095
}
2096-
}
2096+
}
2097+
2098+
void *
2099+
_PyPegen_raise_syntax_error_for_augassign(Parser *p, expr_ty e) {
2100+
expr_ty invalid_target = _PyPegen_get_invalid_target(e);
2101+
2102+
if (invalid_target != NULL) {
2103+
RAISE_SYNTAX_ERROR_KNOWN_LOCATION(invalid_target,
2104+
"cannot assign to %s", _PyPegen_get_expr_name(invalid_target));
2105+
} else {
2106+
RAISE_SYNTAX_ERROR_KNOWN_LOCATION(e, "illegal expression for augmented assignment");
2107+
}
2108+
return NULL;
2109+
}
2110+

Parser/pegen/pegen.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -263,7 +263,7 @@ mod_ty _PyPegen_make_module(Parser *, asdl_seq *);
263263
// Error reporting helpers
264264

265265
expr_ty _PyPegen_get_invalid_target(expr_ty e);
266-
266+
void *_PyPegen_raise_syntax_error_for_augassign(Parser *p, expr_ty e);
267267

268268
void *_PyPegen_parse(Parser *);
269269

0 commit comments

Comments
 (0)