mirror of
https://github.com/python/cpython.git
synced 2025-08-25 11:15:02 +00:00
gh-109118: Make comprehensions work within annotation scopes, but without inlining (#118160)
Co-authored-by: Carl Meyer <carl@oddbird.net>
This commit is contained in:
parent
51aefc5bf9
commit
2326d6c868
4 changed files with 39 additions and 34 deletions
|
@ -1154,10 +1154,12 @@ analyze_block(PySTEntryObject *ste, PyObject *bound, PyObject *free,
|
|||
}
|
||||
}
|
||||
|
||||
// we inline all non-generator-expression comprehensions
|
||||
// we inline all non-generator-expression comprehensions,
|
||||
// except those in annotation scopes that are nested in classes
|
||||
int inline_comp =
|
||||
entry->ste_comprehension &&
|
||||
!entry->ste_generator;
|
||||
!entry->ste_generator &&
|
||||
!ste->ste_can_see_class_scope;
|
||||
|
||||
if (!analyze_child_block(entry, newbound, newfree, newglobal,
|
||||
type_params, new_class_entry, &child_free))
|
||||
|
@ -2589,18 +2591,6 @@ 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