summaryrefslogtreecommitdiffstats
path: root/Python/symtable.c
diff options
context:
space:
mode:
Diffstat (limited to 'Python/symtable.c')
-rw-r--r--Python/symtable.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/Python/symtable.c b/Python/symtable.c
index 115882d..691698e 100644
--- a/Python/symtable.c
+++ b/Python/symtable.c
@@ -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));