From f69e0ade19af4d997f52c03881362a6961383487 Mon Sep 17 00:00:00 2001 From: Roberto Ierusalimschy Date: Sat, 1 Mar 2014 12:18:44 -0300 Subject: [PATCH] no need to store a full 'size_t' fo the size of (frequent) small strings --- ldump.c | 22 +++++++++++----------- lundump.c | 10 +++++----- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/ldump.c b/ldump.c index 1078910f..5f0b7a46 100644 --- 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 index ef7444e0..9a3ee218 100644 --- 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); } }