dump/undump of upvalue names
This commit is contained in:
26
lundump.c
26
lundump.c
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
** $Id: lundump.c,v 1.57 2002/11/14 16:15:53 roberto Exp roberto $
|
||||
** $Id: lundump.c,v 1.47 2003/01/10 11:08:45 lhf Exp $
|
||||
** load pre-compiled Lua chunks
|
||||
** See Copyright Notice in lua.h
|
||||
*/
|
||||
@@ -138,6 +138,25 @@ static void LoadLines (LoadState* S, Proto* f)
|
||||
LoadVector(S,f->lineinfo,size,sizeof(*f->lineinfo));
|
||||
}
|
||||
|
||||
static void LoadUpvalues (LoadState* S, Proto* f)
|
||||
{
|
||||
int i,n,noname;
|
||||
n=LoadInt(S);
|
||||
noname=(n==0);
|
||||
if (!noname && n!=f->nupvalues)
|
||||
luaG_runerror(S->L,"bad nupvalues in %s: read %d; expected %d",
|
||||
S->name,n,f->nupvalues);
|
||||
n=f->nupvalues;
|
||||
f->upvalues=luaM_newvector(S->L,n,TString*);
|
||||
if (noname)
|
||||
{
|
||||
TString* name=luaS_newliteral(S->L,"(no name)");
|
||||
for (i=0; i<n; i++) f->upvalues[i]=name;
|
||||
}
|
||||
else
|
||||
for (i=0; i<n; i++) f->upvalues[i]=LoadString(S);
|
||||
}
|
||||
|
||||
static Proto* LoadFunction (LoadState* S, TString* p);
|
||||
|
||||
static void LoadConstants (LoadState* S, Proto* f)
|
||||
@@ -177,12 +196,13 @@ static Proto* LoadFunction (LoadState* S, TString* p)
|
||||
Proto* f=luaF_newproto(S->L);
|
||||
f->source=LoadString(S); if (f->source==NULL) f->source=p;
|
||||
f->lineDefined=LoadInt(S);
|
||||
f->nupvalues=LoadByte(S);
|
||||
f->nupvalues=LoadInt(S);
|
||||
f->numparams=LoadByte(S);
|
||||
f->is_vararg=LoadByte(S);
|
||||
f->maxstacksize=LoadByte(S);
|
||||
LoadLocals(S,f);
|
||||
LoadLines(S,f);
|
||||
LoadLocals(S,f);
|
||||
LoadUpvalues(S,f);
|
||||
LoadConstants(S,f);
|
||||
LoadCode(S,f);
|
||||
#ifndef TRUST_BINARIES
|
||||
|
||||
Reference in New Issue
Block a user