Kaydet (Commit) bdd207af authored tarafından Guido van Rossum's avatar Guido van Rossum

better policy regarding NULL locals

üst 3fc9d73e
...@@ -181,11 +181,15 @@ newframeobject(back, code, globals, locals, owner, nvalues, nblocks) ...@@ -181,11 +181,15 @@ newframeobject(back, code, globals, locals, owner, nvalues, nblocks)
f->f_builtins = builtins; f->f_builtins = builtins;
INCREF(globals); INCREF(globals);
f->f_globals = globals; f->f_globals = globals;
if ((code->co_flags & (CO_NEWLOCALS|CO_OPTIMIZED)) == CO_NEWLOCALS) { if (code->co_flags & CO_NEWLOCALS) {
locals = newdictobject(); if (code->co_flags & CO_OPTIMIZED)
if (locals == NULL) { locals = NULL; /* Let fast_2_locals handle it */
DECREF(f); else {
return NULL; locals = newdictobject();
if (locals == NULL) {
DECREF(f);
return NULL;
}
} }
} }
else { else {
...@@ -285,10 +289,6 @@ fast_2_locals(f) ...@@ -285,10 +289,6 @@ fast_2_locals(f)
int j; int j;
if (f == NULL) if (f == NULL)
return; 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; locals = f->f_locals;
if (locals == NULL) { if (locals == NULL) {
locals = f->f_locals = newdictobject(); locals = f->f_locals = newdictobject();
...@@ -297,6 +297,10 @@ fast_2_locals(f) ...@@ -297,6 +297,10 @@ fast_2_locals(f)
return; 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) || if (!is_dictobject(locals) || !is_listobject(fast) ||
!is_tupleobject(map)) !is_tupleobject(map))
return; 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