aboutsummaryrefslogtreecommitdiff
path: root/lundump.c
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>2003-01-27 13:52:57 -0200
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>2003-01-27 13:52:57 -0200
commit0175f8d5d18d18e2d8a94db9c5be5c40598aebda (patch)
tree9b16f0dfa99f038e87cbd053353042581cbcfc6a /lundump.c
parente79bf02f33c57523833b5b700d0d5b6e6955a5d7 (diff)
downloadlua-0175f8d5d18d18e2d8a94db9c5be5c40598aebda.tar.gz
lua-0175f8d5d18d18e2d8a94db9c5be5c40598aebda.tar.bz2
lua-0175f8d5d18d18e2d8a94db9c5be5c40598aebda.zip
dump/undump of upvalue names
Diffstat (limited to 'lundump.c')
-rw-r--r--lundump.c26
1 files changed, 23 insertions, 3 deletions
diff --git a/lundump.c b/lundump.c
index 48195faa..27d1c049 100644
--- a/lundump.c
+++ b/lundump.c
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: lundump.c,v 1.57 2002/11/14 16:15:53 roberto Exp roberto $ 2** $Id: lundump.c,v 1.47 2003/01/10 11:08:45 lhf Exp $
3** load pre-compiled Lua chunks 3** load pre-compiled Lua chunks
4** See Copyright Notice in lua.h 4** See Copyright Notice in lua.h
5*/ 5*/
@@ -138,6 +138,25 @@ static void LoadLines (LoadState* S, Proto* f)
138 LoadVector(S,f->lineinfo,size,sizeof(*f->lineinfo)); 138 LoadVector(S,f->lineinfo,size,sizeof(*f->lineinfo));
139} 139}
140 140
141static void LoadUpvalues (LoadState* S, Proto* f)
142{
143 int i,n,noname;
144 n=LoadInt(S);
145 noname=(n==0);
146 if (!noname && n!=f->nupvalues)
147 luaG_runerror(S->L,"bad nupvalues in %s: read %d; expected %d",
148 S->name,n,f->nupvalues);
149 n=f->nupvalues;
150 f->upvalues=luaM_newvector(S->L,n,TString*);
151 if (noname)
152 {
153 TString* name=luaS_newliteral(S->L,"(no name)");
154 for (i=0; i<n; i++) f->upvalues[i]=name;
155 }
156 else
157 for (i=0; i<n; i++) f->upvalues[i]=LoadString(S);
158}
159
141static Proto* LoadFunction (LoadState* S, TString* p); 160static Proto* LoadFunction (LoadState* S, TString* p);
142 161
143static void LoadConstants (LoadState* S, Proto* f) 162static void LoadConstants (LoadState* S, Proto* f)
@@ -177,12 +196,13 @@ static Proto* LoadFunction (LoadState* S, TString* p)
177 Proto* f=luaF_newproto(S->L); 196 Proto* f=luaF_newproto(S->L);
178 f->source=LoadString(S); if (f->source==NULL) f->source=p; 197 f->source=LoadString(S); if (f->source==NULL) f->source=p;
179 f->lineDefined=LoadInt(S); 198 f->lineDefined=LoadInt(S);
180 f->nupvalues=LoadByte(S); 199 f->nupvalues=LoadInt(S);
181 f->numparams=LoadByte(S); 200 f->numparams=LoadByte(S);
182 f->is_vararg=LoadByte(S); 201 f->is_vararg=LoadByte(S);
183 f->maxstacksize=LoadByte(S); 202 f->maxstacksize=LoadByte(S);
184 LoadLocals(S,f);
185 LoadLines(S,f); 203 LoadLines(S,f);
204 LoadLocals(S,f);
205 LoadUpvalues(S,f);
186 LoadConstants(S,f); 206 LoadConstants(S,f);
187 LoadCode(S,f); 207 LoadCode(S,f);
188#ifndef TRUST_BINARIES 208#ifndef TRUST_BINARIES