diff options
author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2015-01-16 14:54:37 -0200 |
---|---|---|
committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2015-01-16 14:54:37 -0200 |
commit | 7e2015a46df7976bddee313b994742e49e420714 (patch) | |
tree | 0b2db30f1214a478ccb3664d165c8a431f0d5850 /lgc.c | |
parent | 5b01cb39b5ec36c544152351c35c43149d9bbfec (diff) | |
download | lua-7e2015a46df7976bddee313b994742e49e420714.tar.gz lua-7e2015a46df7976bddee313b994742e49e420714.tar.bz2 lua-7e2015a46df7976bddee313b994742e49e420714.zip |
size of short strings stored in a single byte, to reduce the size
of struct 'TString'
Diffstat (limited to 'lgc.c')
-rw-r--r-- | lgc.c | 15 |
1 files changed, 10 insertions, 5 deletions
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | ** $Id: lgc.c,v 2.200 2014/11/02 19:19:04 roberto Exp roberto $ | 2 | ** $Id: lgc.c,v 2.201 2014/12/20 13:58:15 roberto Exp roberto $ |
3 | ** Garbage Collector | 3 | ** Garbage Collector |
4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
5 | */ | 5 | */ |
@@ -226,10 +226,14 @@ static void reallymarkobject (global_State *g, GCObject *o) { | |||
226 | reentry: | 226 | reentry: |
227 | white2gray(o); | 227 | white2gray(o); |
228 | switch (o->tt) { | 228 | switch (o->tt) { |
229 | case LUA_TSHRSTR: | 229 | case LUA_TSHRSTR: { |
230 | gray2black(o); | ||
231 | g->GCmemtrav += sizelstring(gco2ts(o)->shrlen); | ||
232 | break; | ||
233 | } | ||
230 | case LUA_TLNGSTR: { | 234 | case LUA_TLNGSTR: { |
231 | gray2black(o); | 235 | gray2black(o); |
232 | g->GCmemtrav += sizestring(gco2ts(o)); | 236 | g->GCmemtrav += sizelstring(gco2ts(o)->u.lnglen); |
233 | break; | 237 | break; |
234 | } | 238 | } |
235 | case LUA_TUSERDATA: { | 239 | case LUA_TUSERDATA: { |
@@ -689,9 +693,10 @@ static void freeobj (lua_State *L, GCObject *o) { | |||
689 | case LUA_TUSERDATA: luaM_freemem(L, o, sizeudata(gco2u(o))); break; | 693 | case LUA_TUSERDATA: luaM_freemem(L, o, sizeudata(gco2u(o))); break; |
690 | case LUA_TSHRSTR: | 694 | case LUA_TSHRSTR: |
691 | luaS_remove(L, gco2ts(o)); /* remove it from hash table */ | 695 | luaS_remove(L, gco2ts(o)); /* remove it from hash table */ |
692 | /* go through */ | 696 | luaM_freemem(L, o, sizelstring(gco2ts(o)->shrlen)); |
697 | break; | ||
693 | case LUA_TLNGSTR: { | 698 | case LUA_TLNGSTR: { |
694 | luaM_freemem(L, o, sizestring(gco2ts(o))); | 699 | luaM_freemem(L, o, sizelstring(gco2ts(o)->u.lnglen)); |
695 | break; | 700 | break; |
696 | } | 701 | } |
697 | default: lua_assert(0); | 702 | default: lua_assert(0); |