mirror of
https://github.com/python/cpython.git
synced 2025-08-22 09:45:06 +00:00
[3.12] gh-109118: Disallow nested scopes within PEP 695 scopes within classes (GH-109196) (#109297)
gh-109118: Disallow nested scopes within PEP 695 scopes within classes (GH-109196)
Fixes GH-109118. Fixes GH-109194.
(cherry picked from commit b88d9e75f6
)
Co-authored-by: Jelle Zijlstra <jelle.zijlstra@gmail.com>
Co-authored-by: Carl Meyer <carl@oddbird.net>
This commit is contained in:
parent
778d094126
commit
8208657f3d
3 changed files with 118 additions and 0 deletions
|
@ -1969,6 +1969,17 @@ symtable_visit_expr(struct symtable *st, expr_ty e)
|
|||
VISIT(st, expr, e->v.UnaryOp.operand);
|
||||
break;
|
||||
case Lambda_kind: {
|
||||
if (st->st_cur->ste_can_see_class_scope) {
|
||||
// gh-109118
|
||||
PyErr_Format(PyExc_SyntaxError,
|
||||
"Cannot use lambda in annotation scope within class scope");
|
||||
PyErr_RangedSyntaxLocationObject(st->st_filename,
|
||||
e->lineno,
|
||||
e->col_offset + 1,
|
||||
e->end_lineno,
|
||||
e->end_col_offset + 1);
|
||||
VISIT_QUIT(st, 0);
|
||||
}
|
||||
if (e->v.Lambda.args->defaults)
|
||||
VISIT_SEQ(st, expr, e->v.Lambda.args->defaults);
|
||||
if (e->v.Lambda.args->kw_defaults)
|
||||
|
@ -2418,6 +2429,18 @@ symtable_handle_comprehension(struct symtable *st, expr_ty e,
|
|||
identifier scope_name, asdl_comprehension_seq *generators,
|
||||
expr_ty elt, expr_ty value)
|
||||
{
|
||||
if (st->st_cur->ste_can_see_class_scope) {
|
||||
// gh-109118
|
||||
PyErr_Format(PyExc_SyntaxError,
|
||||
"Cannot use comprehension in annotation scope within class scope");
|
||||
PyErr_RangedSyntaxLocationObject(st->st_filename,
|
||||
e->lineno,
|
||||
e->col_offset + 1,
|
||||
e->end_lineno,
|
||||
e->end_col_offset + 1);
|
||||
VISIT_QUIT(st, 0);
|
||||
}
|
||||
|
||||
int is_generator = (e->kind == GeneratorExp_kind);
|
||||
comprehension_ty outermost = ((comprehension_ty)
|
||||
asdl_seq_GET(generators, 0));
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue