diff options
author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2001-06-07 12:01:21 -0300 |
---|---|---|
committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2001-06-07 12:01:21 -0300 |
commit | ba11831d357889ee090ce92ff508957c6c023c42 (patch) | |
tree | d54958d74c7fc1d5b751bf4819ed7345e3b6e69b /lgc.c | |
parent | 190ddd431dd9f14148d232ed9a72db482a1df934 (diff) | |
download | lua-ba11831d357889ee090ce92ff508957c6c023c42.tar.gz lua-ba11831d357889ee090ce92ff508957c6c023c42.tar.bz2 lua-ba11831d357889ee090ce92ff508957c6c023c42.zip |
smaller structs for udata and for strings
Diffstat (limited to 'lgc.c')
-rw-r--r-- | lgc.c | 11 |
1 files changed, 6 insertions, 5 deletions
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | ** $Id: lgc.c,v 1.99 2001/06/05 19:27:32 roberto Exp roberto $ | 2 | ** $Id: lgc.c,v 1.100 2001/06/06 18:00:19 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 | */ |
@@ -86,7 +86,8 @@ static void markobject (GCState *st, TObject *o) { | |||
86 | strmark(tsvalue(o)); | 86 | strmark(tsvalue(o)); |
87 | break; | 87 | break; |
88 | case LUA_TUSERDATA: | 88 | case LUA_TUSERDATA: |
89 | uvalue(o)->marked = 1; | 89 | if (!ismarkedudata(uvalue(o))) |
90 | switchudatamark(uvalue(o)); | ||
90 | break; | 91 | break; |
91 | case LUA_TFUNCTION: | 92 | case LUA_TFUNCTION: |
92 | markclosure(st, clvalue(o)); | 93 | markclosure(st, clvalue(o)); |
@@ -196,7 +197,7 @@ static int hasmark (const TObject *o) { | |||
196 | case LUA_TSTRING: | 197 | case LUA_TSTRING: |
197 | return tsvalue(o)->marked; | 198 | return tsvalue(o)->marked; |
198 | case LUA_TUSERDATA: | 199 | case LUA_TUSERDATA: |
199 | return uvalue(o)->marked; | 200 | return ismarkedudata(uvalue(o)); |
200 | case LUA_TTABLE: | 201 | case LUA_TTABLE: |
201 | return ismarked(hvalue(o)); | 202 | return ismarked(hvalue(o)); |
202 | case LUA_TFUNCTION: | 203 | case LUA_TFUNCTION: |
@@ -284,8 +285,8 @@ static void collectudata (lua_State *L) { | |||
284 | Udata **p = &G(L)->rootudata; | 285 | Udata **p = &G(L)->rootudata; |
285 | Udata *next; | 286 | Udata *next; |
286 | while ((next = *p) != NULL) { | 287 | while ((next = *p) != NULL) { |
287 | if (next->marked) { | 288 | if (ismarkedudata(next)) { |
288 | next->marked = 0; /* unmark */ | 289 | switchudatamark(next); /* unmark */ |
289 | p = &next->next; | 290 | p = &next->next; |
290 | } | 291 | } |
291 | else { /* collect */ | 292 | else { /* collect */ |