From 0175f8d5d18d18e2d8a94db9c5be5c40598aebda Mon Sep 17 00:00:00 2001 From: Roberto Ierusalimschy Date: Mon, 27 Jan 2003 13:52:57 -0200 Subject: dump/undump of upvalue names --- lundump.c | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) (limited to 'lundump.c') diff --git a/lundump.c b/lundump.c index 48195faa..27d1c049 100644 --- a/lundump.c +++ b/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; iupvalues[i]=name; + } + else + for (i=0; iupvalues[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 -- cgit v1.2.3-55-g6feb