From: Guido van Rossum Date: Fri, 24 Jan 1997 04:00:21 +0000 (+0000) Subject: When a recycled frame has more local+stack slots than needed, X-Git-Tag: v1.5a1~431 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=747596a4917cc8924519bdee081a894ebcb0e059;p=python When a recycled frame has more local+stack slots than needed, give the extra slots to the stack rather than than forgetting about them (this reduces the number of reallocs done). --- diff --git a/Objects/frameobject.c b/Objects/frameobject.c index 79757e9583..ae962e9958 100644 --- a/Objects/frameobject.c +++ b/Objects/frameobject.c @@ -172,6 +172,8 @@ newframeobject(back, code, globals, locals) if (f == NULL) return (PyFrameObject *)err_nomem(); } + else + extras = f->f_nlocals + f->f_stacksize; f->ob_type = &Frametype; NEWREF(f); } @@ -203,11 +205,11 @@ newframeobject(back, code, globals, locals) f->f_trace = NULL; f->f_lasti = 0; - f->f_lineno = -1; + f->f_lineno = code->co_firstlineno; f->f_restricted = (builtins != getbuiltindict()); f->f_iblock = 0; f->f_nlocals = code->co_nlocals; - f->f_stacksize = code->co_stacksize; + f->f_stacksize = extras - code->co_nlocals; while (--extras >= 0) f->f_localsplus[extras] = NULL;