Lua closures are cached for reuse

This commit is contained in:
Roberto Ierusalimschy
2010-06-04 10:25:10 -03:00
parent 545f43065f
commit 575074fd85
5 changed files with 114 additions and 36 deletions

View File

@@ -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;