bpo-43914: Correctly highlight SyntaxError exceptions for invalid generator expression in function calls (GH-28576)

This commit is contained in:
Pablo Galindo Salgado 2021-09-27 14:37:43 +01:00 committed by GitHub
parent a22be4943c
commit e5f13ce5b4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 31 additions and 8 deletions

View file

@ -2551,8 +2551,17 @@ void *_PyPegen_arguments_parsing_error(Parser *p, expr_ty e) {
return RAISE_SYNTAX_ERROR(msg);
}
static inline expr_ty
_PyPegen_get_last_comprehension_item(comprehension_ty comprehension) {
if (comprehension->ifs == NULL || asdl_seq_LEN(comprehension->ifs) == 0) {
return comprehension->iter;
}
return PyPegen_last_item(comprehension->ifs, expr_ty);
}
void *
_PyPegen_nonparen_genexp_in_call(Parser *p, expr_ty args)
_PyPegen_nonparen_genexp_in_call(Parser *p, expr_ty args, asdl_comprehension_seq *comprehensions)
{
/* The rule that calls this function is 'args for_if_clauses'.
For the input f(L, x for x in y), L and x are in args and
@ -2566,8 +2575,11 @@ _PyPegen_nonparen_genexp_in_call(Parser *p, expr_ty args)
return NULL;
}
return RAISE_SYNTAX_ERROR_STARTING_FROM(
comprehension_ty last_comprehension = PyPegen_last_item(comprehensions, comprehension_ty);
return RAISE_SYNTAX_ERROR_KNOWN_RANGE(
(expr_ty) asdl_seq_GET(args->v.Call.args, len - 1),
_PyPegen_get_last_comprehension_item(last_comprehension),
"Generator expression must be parenthesized"
);
}