Skip to content

Commit ed64876

Browse files
committed
Generate correct error message for generator expression following
keyword arguments
1 parent 9b8b22d commit ed64876

File tree

2 files changed

+27
-0
lines changed

2 files changed

+27
-0
lines changed

Grammar/python.gram

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -625,6 +625,8 @@ incorrect_arguments:
625625
| a=expression for_if_clauses ',' [args | expression for_if_clauses] {
626626
RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "Generator expression must be parenthesized") }
627627
| a=args for_if_clauses { _PyPegen_nonparen_genexp_in_call(p, a) }
628+
| args ',' a=expression for_if_clauses {
629+
RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "Generator expression must be parenthesized") }
628630
| a=args ',' args { _PyPegen_arguments_parsing_error(p, a) }
629631
invalid_kwarg:
630632
| a=expression '=' {

Parser/pegen/parse.c

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10595,6 +10595,7 @@ t_atom_rule(Parser *p)
1059510595
// | args ',' '*'
1059610596
// | expression for_if_clauses ',' [args | expression for_if_clauses]
1059710597
// | args for_if_clauses
10598+
// | args ',' expression for_if_clauses
1059810599
// | args ',' args
1059910600
static void *
1060010601
incorrect_arguments_rule(Parser *p)
@@ -10668,6 +10669,30 @@ incorrect_arguments_rule(Parser *p)
1066810669
}
1066910670
p->mark = _mark;
1067010671
}
10672+
{ // args ',' expression for_if_clauses
10673+
Token * _literal;
10674+
expr_ty a;
10675+
expr_ty args_var;
10676+
asdl_seq* for_if_clauses_var;
10677+
if (
10678+
(args_var = args_rule(p)) // args
10679+
&&
10680+
(_literal = _PyPegen_expect_token(p, 12)) // token=','
10681+
&&
10682+
(a = expression_rule(p)) // expression
10683+
&&
10684+
(for_if_clauses_var = for_if_clauses_rule(p)) // for_if_clauses
10685+
)
10686+
{
10687+
_res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "Generator expression must be parenthesized" );
10688+
if (_res == NULL && PyErr_Occurred()) {
10689+
p->error_indicator = 1;
10690+
return NULL;
10691+
}
10692+
goto done;
10693+
}
10694+
p->mark = _mark;
10695+
}
1067110696
{ // args ',' args
1067210697
Token * _literal;
1067310698
expr_ty a;

0 commit comments

Comments
 (0)