Removed type 'varint_t'
size_t should be big enough to count the number of strings in a dump. (And, by definition, it is big enough to count the length of each string.)
This commit is contained in:
22
ldump.c
22
ldump.c
@@ -30,7 +30,7 @@ typedef struct {
|
||||
int strip;
|
||||
int status;
|
||||
Table *h; /* table to track saved strings */
|
||||
lua_Unsigned nstr; /* counter to number saved strings */
|
||||
lua_Integer nstr; /* counter for counting saved strings */
|
||||
} DumpState;
|
||||
|
||||
|
||||
@@ -86,12 +86,12 @@ static void dumpByte (DumpState *D, int y) {
|
||||
** size for 'dumpVarint' buffer: each byte can store up to 7 bits.
|
||||
** (The "+6" rounds up the division.)
|
||||
*/
|
||||
#define DIBS ((sizeof(varint_t) * CHAR_BIT + 6) / 7)
|
||||
#define DIBS ((sizeof(size_t) * CHAR_BIT + 6) / 7)
|
||||
|
||||
/*
|
||||
** Dumps an unsigned integer using the MSB Varint encoding
|
||||
*/
|
||||
static void dumpVarint (DumpState *D, varint_t x) {
|
||||
static void dumpVarint (DumpState *D, size_t x) {
|
||||
lu_byte buff[DIBS];
|
||||
int n = 1;
|
||||
buff[DIBS - 1] = x & 0x7f; /* fill least-significant byte */
|
||||
@@ -101,9 +101,13 @@ static void dumpVarint (DumpState *D, varint_t x) {
|
||||
}
|
||||
|
||||
|
||||
static void dumpSize (DumpState *D, size_t sz) {
|
||||
dumpVarint(D, sz);
|
||||
}
|
||||
|
||||
static void dumpInt (DumpState *D, int x) {
|
||||
lua_assert(x >= 0);
|
||||
dumpVarint(D, x);
|
||||
dumpVarint(D, cast(size_t, x));
|
||||
}
|
||||
|
||||
|
||||
@@ -126,22 +130,22 @@ static void dumpInteger (DumpState *D, lua_Integer x) {
|
||||
*/
|
||||
static void dumpString (DumpState *D, TString *ts) {
|
||||
if (ts == NULL)
|
||||
dumpVarint(D, 0);
|
||||
dumpSize(D, 0);
|
||||
else {
|
||||
TValue idx;
|
||||
if (luaH_getstr(D->h, ts, &idx) == HOK) { /* string already saved? */
|
||||
dumpVarint(D, 1); /* reuse a saved string */
|
||||
dumpVarint(D, l_castS2U(ivalue(&idx))); /* index of saved string */
|
||||
dumpSize(D, 1); /* reuse a saved string */
|
||||
dumpSize(D, cast_sizet(ivalue(&idx))); /* index of saved string */
|
||||
}
|
||||
else { /* must write and save the string */
|
||||
TValue key, value; /* to save the string in the hash */
|
||||
size_t size;
|
||||
const char *s = getlstr(ts, size);
|
||||
dumpVarint(D, size + 2);
|
||||
dumpSize(D, size + 2);
|
||||
dumpVector(D, s, size + 1); /* include ending '\0' */
|
||||
D->nstr++; /* one more saved string */
|
||||
setsvalue(D->L, &key, ts); /* the string is the key */
|
||||
setivalue(&value, l_castU2S(D->nstr)); /* its index is the value */
|
||||
setivalue(&value, D->nstr); /* its index is the value */
|
||||
luaH_set(D->L, D->h, &key, &value); /* h[ts] = nstr */
|
||||
/* integer value does not need barrier */
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user