diff options
author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2022-12-20 11:14:52 -0300 |
---|---|---|
committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2022-12-20 11:14:52 -0300 |
commit | 7d6a97e42bc3328b9c5ec1dabbd7e280e81c3efd (patch) | |
tree | 24c32dddd2b6df02d22bdcacc0636a18f37f7471 /lundump.c | |
parent | d70a0c91ad42275af1f6f1b6e37c604442b3f0d1 (diff) | |
download | lua-7d6a97e42bc3328b9c5ec1dabbd7e280e81c3efd.tar.gz lua-7d6a97e42bc3328b9c5ec1dabbd7e280e81c3efd.tar.bz2 lua-7d6a97e42bc3328b9c5ec1dabbd7e280e81c3efd.zip |
Dump doesn't need to reuse 'source'
All strings are being reused now, including 'source'.
Diffstat (limited to 'lundump.c')
-rw-r--r-- | lundump.c | 10 |
1 files changed, 4 insertions, 6 deletions
@@ -162,7 +162,7 @@ static void loadCode (LoadState *S, Proto *f) { | |||
162 | } | 162 | } |
163 | 163 | ||
164 | 164 | ||
165 | static void loadFunction(LoadState *S, Proto *f, TString *psource); | 165 | static void loadFunction(LoadState *S, Proto *f); |
166 | 166 | ||
167 | 167 | ||
168 | static void loadConstants (LoadState *S, Proto *f) { | 168 | static void loadConstants (LoadState *S, Proto *f) { |
@@ -211,7 +211,7 @@ static void loadProtos (LoadState *S, Proto *f) { | |||
211 | for (i = 0; i < n; i++) { | 211 | for (i = 0; i < n; i++) { |
212 | f->p[i] = luaF_newproto(S->L); | 212 | f->p[i] = luaF_newproto(S->L); |
213 | luaC_objbarrier(S->L, f, f->p[i]); | 213 | luaC_objbarrier(S->L, f, f->p[i]); |
214 | loadFunction(S, f->p[i], f->source); | 214 | loadFunction(S, f->p[i]); |
215 | } | 215 | } |
216 | } | 216 | } |
217 | 217 | ||
@@ -266,10 +266,8 @@ static void loadDebug (LoadState *S, Proto *f) { | |||
266 | } | 266 | } |
267 | 267 | ||
268 | 268 | ||
269 | static void loadFunction (LoadState *S, Proto *f, TString *psource) { | 269 | static void loadFunction (LoadState *S, Proto *f) { |
270 | f->source = loadStringN(S, f); | 270 | f->source = loadStringN(S, f); |
271 | if (f->source == NULL) /* no source in dump? */ | ||
272 | f->source = psource; /* reuse parent's source */ | ||
273 | f->linedefined = loadInt(S); | 271 | f->linedefined = loadInt(S); |
274 | f->lastlinedefined = loadInt(S); | 272 | f->lastlinedefined = loadInt(S); |
275 | f->numparams = loadByte(S); | 273 | f->numparams = loadByte(S); |
@@ -342,7 +340,7 @@ LClosure *luaU_undump(lua_State *L, ZIO *Z, const char *name) { | |||
342 | luaD_inctop(L); | 340 | luaD_inctop(L); |
343 | cl->p = luaF_newproto(L); | 341 | cl->p = luaF_newproto(L); |
344 | luaC_objbarrier(L, cl, cl->p); | 342 | luaC_objbarrier(L, cl, cl->p); |
345 | loadFunction(&S, cl->p, NULL); | 343 | loadFunction(&S, cl->p); |
346 | lua_assert(cl->nupvalues == cl->p->sizeupvalues); | 344 | lua_assert(cl->nupvalues == cl->p->sizeupvalues); |
347 | luai_verifycode(L, cl->p); | 345 | luai_verifycode(L, cl->p); |
348 | L->top.p--; /* pop table */ | 346 | L->top.p--; /* pop table */ |