no need to store a full 'size_t' fo the size of (frequent) small strings

This commit is contained in:
Roberto Ierusalimschy
2014-03-01 12:18:44 -03:00
parent 99a1c06ea3
commit f69e0ade19
2 changed files with 16 additions and 16 deletions

22
ldump.c
View File

@@ -1,5 +1,5 @@
/* /*
** $Id: ldump.c,v 2.22 2014/02/28 12:25:12 roberto Exp roberto $ ** $Id: ldump.c,v 2.23 2014/02/28 16:13:01 roberto Exp roberto $
** save precompiled Lua chunks ** save precompiled Lua chunks
** See Copyright Notice in lua.h ** See Copyright Notice in lua.h
*/ */
@@ -60,16 +60,16 @@ static void DumpInteger(lua_Integer x, DumpState* D)
static void DumpString(const TString* s, DumpState* D) static void DumpString(const TString* s, DumpState* D)
{ {
if (s==NULL) if (s==NULL) DumpByte(0,D);
{ else {
size_t size=0; size_t size = s->tsv.len+1; /* include trailing '\0' */
DumpVar(size,D); if (size < 0xFF) DumpByte(size,D);
} else
else {
{ DumpByte(0xFF,D);
size_t size=s->tsv.len+1; /* include trailing '\0' */ DumpVar(size,D);
DumpVar(size,D); }
DumpBlock(getstr(s),size*sizeof(char),D); DumpVector(getstr(s),size-1,D); /* no need to save '\0' */
} }
} }

View File

@@ -1,5 +1,5 @@
/* /*
** $Id: lundump.c,v 2.28 2014/02/28 12:25:12 roberto Exp roberto $ ** $Id: lundump.c,v 2.29 2014/02/28 16:13:01 roberto Exp roberto $
** load precompiled Lua chunks ** load precompiled Lua chunks
** See Copyright Notice in lua.h ** See Copyright Notice in lua.h
*/ */
@@ -76,15 +76,15 @@ static lua_Integer LoadInteger(LoadState* S)
static TString* LoadString(LoadState* S) static TString* LoadString(LoadState* S)
{ {
size_t size; size_t size = LoadByte(S);
LoadVar(S,size); if (size == 0xFF) LoadVar(S,size);
if (size==0) if (size==0)
return NULL; return NULL;
else else
{ {
char* s=luaZ_openspace(S->L,S->b,size); char* s=luaZ_openspace(S->L,S->b,--size);
LoadVector(S,s,size); LoadVector(S,s,size);
return luaS_newlstr(S->L,s,size-1); /* remove trailing '\0' */ return luaS_newlstr(S->L,s,size);
} }
} }