aboutsummaryrefslogtreecommitdiff
path: root/lgc.c
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>2001-06-07 12:01:21 -0300
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>2001-06-07 12:01:21 -0300
commitba11831d357889ee090ce92ff508957c6c023c42 (patch)
treed54958d74c7fc1d5b751bf4819ed7345e3b6e69b /lgc.c
parent190ddd431dd9f14148d232ed9a72db482a1df934 (diff)
downloadlua-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.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/lgc.c b/lgc.c
index 86b7d092..fcd22a86 100644
--- a/lgc.c
+++ b/lgc.c
@@ -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 */