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:
Tim Peters 2001-07-16 02:29:45 +00:00
parent 4dbf87152e
commit 5ba5866281
11 changed files with 77 additions and 33 deletions

View file

@ -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)