From 575074fd857b90cd7c14c7b172e8fe147080962a Mon Sep 17 00:00:00 2001 From: Roberto Ierusalimschy Date: Fri, 4 Jun 2010 10:25:10 -0300 Subject: Lua closures are cached for reuse --- lfunc.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'lfunc.c') diff --git a/lfunc.c b/lfunc.c index 6c8dda4b..92837f09 100644 --- a/lfunc.c +++ b/lfunc.c @@ -1,5 +1,5 @@ /* -** $Id: lfunc.c,v 2.23 2010/04/29 21:43:36 roberto Exp roberto $ +** $Id: lfunc.c,v 2.24 2010/05/10 18:23:45 roberto Exp roberto $ ** Auxiliary functions to manipulate prototypes and closures ** See Copyright Notice in lua.h */ @@ -29,9 +29,11 @@ Closure *luaF_newCclosure (lua_State *L, int n) { } -Closure *luaF_newLclosure (lua_State *L, int n) { +Closure *luaF_newLclosure (lua_State *L, Proto *p) { + int n = p->sizeupvalues; Closure *c = &luaC_newobj(L, LUA_TFUNCTION, sizeLclosure(n), NULL, 0)->cl; c->l.isC = 0; + c->l.p = p; c->l.nupvalues = cast_byte(n); while (n--) c->l.upvals[n] = NULL; return c; @@ -116,6 +118,7 @@ Proto *luaF_newproto (lua_State *L) { f->p = NULL; f->sizep = 0; f->code = NULL; + f->cache = NULL; f->sizecode = 0; f->lineinfo = NULL; f->sizelineinfo = 0; -- cgit v1.2.3-55-g6feb