summaryrefslogtreecommitdiff
path: root/lundump.c
diff options
context:
space:
mode:
Diffstat (limited to 'lundump.c')
-rw-r--r--lundump.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/lundump.c b/lundump.c
index b75e10af..edf9eb8d 100644
--- a/lundump.c
+++ b/lundump.c
@@ -86,6 +86,7 @@ static lua_Integer LoadInteger (LoadState *S) {
static TString *LoadString (LoadState *S, Proto *p) {
+ lua_State *L = S->L;
size_t size = LoadByte(S);
TString *ts;
if (size == 0xFF)
@@ -95,13 +96,16 @@ static TString *LoadString (LoadState *S, Proto *p) {
else if (--size <= LUAI_MAXSHORTLEN) { /* short string? */
char buff[LUAI_MAXSHORTLEN];
LoadVector(S, buff, size);
- ts = luaS_newlstr(S->L, buff, size);
+ ts = luaS_newlstr(L, buff, size);
}
else { /* long string */
- ts = luaS_createlngstrobj(S->L, size);
+ ts = luaS_createlngstrobj(L, size);
+ setsvalue2s(L, L->top, ts); /* anchor it ('loadVector' can GC) */
+ luaD_inctop(L);
LoadVector(S, getstr(ts), size); /* load directly in final place */
+ L->top--; /* pop string */
}
- luaC_objbarrier(S->L, p, ts);
+ luaC_objbarrier(L, p, ts);
return ts;
}