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 79757e9..ae962e9 100644
--- a/Objects/frameobject.c
+++ b/Objects/frameobject.c
@@ -172,6 +172,8 @@
 			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 @@
 	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;