From bdd207af79d55d5aa11d00f56313929eb92d1822 Mon Sep 17 00:00:00 2001 From: Guido van Rossum Date: Wed, 26 Jul 1995 16:14:30 +0000 Subject: [PATCH] better policy regarding NULL locals --- Objects/frameobject.c | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/Objects/frameobject.c b/Objects/frameobject.c index b2884080bcd..6441855d266 100644 --- a/Objects/frameobject.c +++ b/Objects/frameobject.c @@ -181,11 +181,15 @@ 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) { - locals = newdictobject(); - if (locals == NULL) { - DECREF(f); - return NULL; + 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 { @@ -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;