mirror of
https://github.com/python/cpython.git
synced 2025-10-28 01:00:34 +00:00
Part way to allowing "from __future__ import generators" to communicate
that info to code dynamically compiled *by* code compiled with generators enabled. Doesn't yet work because there's still no way to tell the parser that "yield" is OK (unlike nested_scopes, the parser has its fingers in this too). Replaced PyEval_GetNestedScopes by a more-general PyEval_MergeCompilerFlags. Perhaps I should not have? I doubted it was *intended* to be part of the public API, so just did.
This commit is contained in:
parent
4dbf87152e
commit
5ba5866281
11 changed files with 77 additions and 33 deletions
|
|
@ -3953,10 +3953,15 @@ jcompile(node *n, char *filename, struct compiling *base,
|
|||
return NULL;
|
||||
}
|
||||
if (flags) {
|
||||
if (flags->cf_nested_scopes)
|
||||
if (flags->cf_flags & PyCF_NESTED_SCOPES)
|
||||
sc.c_future->ff_nested_scopes = 1;
|
||||
else if (sc.c_future->ff_nested_scopes)
|
||||
flags->cf_nested_scopes = 1;
|
||||
flags->cf_flags |= PyCF_NESTED_SCOPES;
|
||||
|
||||
if (flags->cf_flags & PyCF_GENERATORS)
|
||||
sc.c_future->ff_generators = 1;
|
||||
else if (sc.c_future->ff_generators)
|
||||
flags->cf_flags |= PyCF_GENERATORS;
|
||||
}
|
||||
if (symtable_build(&sc, n) < 0) {
|
||||
com_free(&sc);
|
||||
|
|
@ -4426,8 +4431,12 @@ static int
|
|||
symtable_update_flags(struct compiling *c, PySymtableEntryObject *ste,
|
||||
struct symbol_info *si)
|
||||
{
|
||||
if (c->c_future && c->c_future->ff_nested_scopes)
|
||||
c->c_flags |= CO_NESTED;
|
||||
if (c->c_future) {
|
||||
if (c->c_future->ff_nested_scopes)
|
||||
c->c_flags |= CO_NESTED;
|
||||
if (c->c_future->ff_generators)
|
||||
c->c_flags |= CO_GENERATOR_ALLOWED;
|
||||
}
|
||||
if (ste->ste_generator)
|
||||
c->c_flags |= CO_GENERATOR;
|
||||
if (ste->ste_type != TYPE_MODULE)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue