commit f69e0ade19af4d997f52c03881362a6961383487
parent 99a1c06ea34c823e7692deac3a23fec4831d8f79
Author: Roberto Ierusalimschy <roberto@inf.puc-rio.br>
Date: Sat, 1 Mar 2014 12:18:19 -0300
no need to store a full 'size_t' fo the size of (frequent) small strings
Diffstat:
2 files changed, 16 insertions(+), 16 deletions(-)
diff --git a/ldump.c b/ldump.c
@@ -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
** 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)
{
- if (s==NULL)
- {
- size_t size=0;
- DumpVar(size,D);
- }
- else
- {
- size_t size=s->tsv.len+1; /* include trailing '\0' */
- DumpVar(size,D);
- DumpBlock(getstr(s),size*sizeof(char),D);
+ if (s==NULL) DumpByte(0,D);
+ else {
+ size_t size = s->tsv.len+1; /* include trailing '\0' */
+ if (size < 0xFF) DumpByte(size,D);
+ else
+ {
+ DumpByte(0xFF,D);
+ DumpVar(size,D);
+ }
+ DumpVector(getstr(s),size-1,D); /* no need to save '\0' */
}
}
diff --git a/lundump.c b/lundump.c
@@ -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
** See Copyright Notice in lua.h
*/
@@ -76,15 +76,15 @@ static lua_Integer LoadInteger(LoadState* S)
static TString* LoadString(LoadState* S)
{
- size_t size;
- LoadVar(S,size);
+ size_t size = LoadByte(S);
+ if (size == 0xFF) LoadVar(S,size);
if (size==0)
return NULL;
else
{
- char* s=luaZ_openspace(S->L,S->b,size);
+ char* s=luaZ_openspace(S->L,S->b,--size);
LoadVector(S,s,size);
- return luaS_newlstr(S->L,s,size-1); /* remove trailing '\0' */
+ return luaS_newlstr(S->L,s,size);
}
}