Commit bdd207af authored by Guido van Rossum's avatar Guido van Rossum

better policy regarding NULL locals

parent 3fc9d73e
......@@ -181,13 +181,17 @@ newframeobject(back, code, globals, locals, owner, nvalues, nblocks)
f->f_builtins = builtins;
INCREF(globals);
f->f_globals = globals;
if ((code->co_flags & (CO_NEWLOCALS|CO_OPTIMIZED)) == CO_NEWLOCALS) {
if (code->co_flags & CO_NEWLOCALS) {
if (code->co_flags & CO_OPTIMIZED)
locals = NULL; /* Let fast_2_locals handle it */
else {
locals = newdictobject();
if (locals == NULL) {
DECREF(f);
return NULL;
}
}
}
else {
if (locals == NULL)
locals = globals;
......@@ -285,10 +289,6 @@ fast_2_locals(f)
int j;
if (f == NULL)
return;
fast = f->f_fastlocals;
if (fast == NULL || f->f_code->co_nlocals == 0)
return;
map = f->f_code->co_varnames;
locals = f->f_locals;
if (locals == NULL) {
locals = f->f_locals = newdictobject();
......@@ -297,6 +297,10 @@ fast_2_locals(f)
return;
}
}
fast = f->f_fastlocals;
if (fast == NULL || f->f_code->co_nlocals == 0)
return;
map = f->f_code->co_varnames;
if (!is_dictobject(locals) || !is_listobject(fast) ||
!is_tupleobject(map))
return;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment