diff options
Diffstat (limited to 'lundump.c')
| -rw-r--r-- | lundump.c | 26 |
1 files changed, 23 insertions, 3 deletions
| @@ -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 | ||
| 141 | static 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 | |||
| 141 | static Proto* LoadFunction (LoadState* S, TString* p); | 160 | static Proto* LoadFunction (LoadState* S, TString* p); |
| 142 | 161 | ||
| 143 | static void LoadConstants (LoadState* S, Proto* f) | 162 | static 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 |
