diff --git a/ldump.c b/ldump.c index 3aaab852..4408ec01 100644 --- a/ldump.c +++ b/ldump.c @@ -1,5 +1,5 @@ /* -** $Id: ldump.c,v 2.19 2013/04/26 18:48:35 roberto Exp roberto $ +** $Id: ldump.c,v 2.20 2014/02/27 16:56:20 roberto Exp roberto $ ** save precompiled Lua chunks ** See Copyright Notice in lua.h */ @@ -184,6 +184,7 @@ int luaU_dump (lua_State* L, const Proto* f, lua_Writer w, void* data, int strip D.strip=strip; D.status=0; DumpHeader(&D); + DumpChar(f->sizeupvalues,&D); DumpFunction(f,&D); return D.status; } diff --git a/lundump.c b/lundump.c index 25e98dd6..a976e6dd 100644 --- a/lundump.c +++ b/lundump.c @@ -1,5 +1,5 @@ /* -** $Id: lundump.c,v 2.25 2014/02/13 12:11:34 roberto Exp roberto $ +** $Id: lundump.c,v 2.26 2014/02/27 16:56:20 roberto Exp roberto $ ** load precompiled Lua chunks ** See Copyright Notice in lua.h */ @@ -238,17 +238,11 @@ Closure* luaU_undump (lua_State* L, ZIO* Z, Mbuffer* buff, const char* name) S.Z=Z; S.b=buff; checkHeader(&S); - cl=luaF_newLclosure(L,1); + cl=luaF_newLclosure(L,LoadByte(&S)); setclLvalue(L,L->top,cl); incr_top(L); cl->l.p=luaF_newproto(L); LoadFunction(&S,cl->l.p); - if (cl->l.p->sizeupvalues != 1) - { - Proto* p=cl->l.p; - cl=luaF_newLclosure(L,cl->l.p->sizeupvalues); - cl->l.p=p; - setclLvalue(L,L->top-1,cl); - } + lua_assert(cl->l.nupvalues==cl->l.p->sizeupvalues); luai_verifycode(L,buff,cl->l.p); return cl; }