Solving merge issue with use of tables in dump/undump

The use of tables in dump/undump to reuse strings did not exist in
the version that changed the representation of arrays, so it was not
corrected for the new API for tables.
This commit is contained in:
Roberto Ierusalimschy
2023-11-08 10:02:06 -03:00
parent 37c215b43f
commit 19afd91687
2 changed files with 7 additions and 6 deletions

View File

@@ -116,10 +116,10 @@ static void dumpString (DumpState *D, TString *ts) {
if (ts == NULL)
dumpSize(D, 0);
else {
const TValue *idx = luaH_getstr(D->h, ts);
if (ttisinteger(idx)) { /* string already saved? */
TValue idx;
if (luaH_getstr(D->h, ts, &idx) == HOK) { /* string already saved? */
dumpSize(D, 1); /* reuse a saved string */
dumpInt(D, ivalue(idx)); /* index of saved string */
dumpInt(D, ivalue(&idx)); /* index of saved string */
}
else { /* must write and save the string */
TValue key, value; /* to save the string in the hash */
@@ -130,7 +130,7 @@ static void dumpString (DumpState *D, TString *ts) {
D->nstr++; /* one more saved string */
setsvalue(D->L, &key, ts); /* the string is the key */
setivalue(&value, D->nstr); /* its index is the value */
luaH_finishset(D->L, D->h, &key, idx, &value); /* h[ts] = nstr */
luaH_set(D->L, D->h, &key, &value); /* h[ts] = nstr */
/* integer value does not need barrier */
}
}

View File

@@ -143,8 +143,9 @@ static TString *loadStringN (LoadState *S, Proto *p) {
return NULL;
else if (size == 1) { /* previously saved string? */
int idx = loadInt(S); /* get its index */
const TValue *stv = luaH_getint(S->h, idx);
return tsvalue(stv);
TValue stv;
luaH_getint(S->h, idx, &stv);
return tsvalue(&stv);
}
else if (size -= 2, size <= LUAI_MAXSHORTLEN) { /* short string? */
char buff[LUAI_MAXSHORTLEN];