mirror of
https://github.com/python/cpython.git
synced 2025-08-22 01:35:16 +00:00
bpo-34854: Fix compiling string annotations containing lambdas. (GH-9645)
* Compiling a string annotation containing a lambda with keyword-only argument without default value caused a crash. * Remove the final "*" (it is incorrect syntax) in the representation of lambda without *args and keyword-only arguments when compile from AST. * Improve the representation of lambda without arguments.
This commit is contained in:
parent
d5bd036138
commit
2a2940e5c3
3 changed files with 11 additions and 5 deletions
|
@ -212,7 +212,7 @@ append_ast_args(_PyUnicodeWriter *writer, arguments_ty args)
|
|||
}
|
||||
|
||||
/* vararg, or bare '*' if no varargs but keyword-only arguments present */
|
||||
if (args->vararg || args->kwonlyargs) {
|
||||
if (args->vararg || asdl_seq_LEN(args->kwonlyargs)) {
|
||||
APPEND_STR_IF_NOT_FIRST(", ");
|
||||
APPEND_STR("*");
|
||||
if (args->vararg) {
|
||||
|
@ -229,8 +229,11 @@ append_ast_args(_PyUnicodeWriter *writer, arguments_ty args)
|
|||
|
||||
di = i - arg_count + default_count;
|
||||
if (di >= 0) {
|
||||
APPEND_STR("=");
|
||||
APPEND_EXPR((expr_ty)asdl_seq_GET(args->kw_defaults, di), PR_TEST);
|
||||
expr_ty default_ = (expr_ty)asdl_seq_GET(args->kw_defaults, di);
|
||||
if (default_) {
|
||||
APPEND_STR("=");
|
||||
APPEND_EXPR(default_, PR_TEST);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -248,7 +251,7 @@ static int
|
|||
append_ast_lambda(_PyUnicodeWriter *writer, expr_ty e, int level)
|
||||
{
|
||||
APPEND_STR_IF(level > PR_TEST, "(");
|
||||
APPEND_STR("lambda ");
|
||||
APPEND_STR(asdl_seq_LEN(e->v.Lambda.args->args) ? "lambda " : "lambda");
|
||||
APPEND(args, e->v.Lambda.args);
|
||||
APPEND_STR(": ");
|
||||
APPEND_EXPR(e->v.Lambda.body, PR_TEST);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue