aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>2014-09-01 14:37:11 -0300
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>2014-09-01 14:37:11 -0300
commitdf608f842ab20a878cf8ed337a4066f5567786a5 (patch)
treeb8e45cf1d794cd04b9069025e5d25b7d1e443377
parent001bb46ae1b2bc0b3ce514f4a98e431656046e97 (diff)
downloadlua-df608f842ab20a878cf8ed337a4066f5567786a5.tar.gz
lua-df608f842ab20a878cf8ed337a4066f5567786a5.tar.bz2
lua-df608f842ab20a878cf8ed337a4066f5567786a5.zip
'linktable' -> 'linkgclist' (and used for all links with 'gclist')
-rw-r--r--lgc.c38
1 files changed, 16 insertions, 22 deletions
diff --git a/lgc.c b/lgc.c
index a4059d34..0182e604 100644
--- a/lgc.c
+++ b/lgc.c
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: lgc.c,v 2.191 2014/07/19 15:14:46 roberto Exp roberto $ 2** $Id: lgc.c,v 2.192 2014/07/29 16:22:24 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*/
@@ -100,9 +100,9 @@ static void reallymarkobject (global_State *g, GCObject *o);
100 100
101 101
102/* 102/*
103** link table 'h' into list pointed by 'p' 103** link collectable object 'o' into list pointed by 'p'
104*/ 104*/
105#define linktable(h,p) ((h)->gclist = *(p), *(p) = obj2gco(h)) 105#define linkgclist(o,p) ((o)->gclist = (p), (p) = obj2gco(o))
106 106
107 107
108/* 108/*
@@ -159,8 +159,7 @@ void luaC_barrierback_ (lua_State *L, Table *t) {
159 global_State *g = G(L); 159 global_State *g = G(L);
160 lua_assert(isblack(t) && !isdead(g, t)); 160 lua_assert(isblack(t) && !isdead(g, t));
161 black2gray(t); /* make table gray (again) */ 161 black2gray(t); /* make table gray (again) */
162 t->gclist = g->grayagain; 162 linkgclist(t, g->grayagain);
163 g->grayagain = obj2gco(t);
164} 163}
165 164
166 165
@@ -243,27 +242,23 @@ static void reallymarkobject (global_State *g, GCObject *o) {
243 break; 242 break;
244 } 243 }
245 case LUA_TLCL: { 244 case LUA_TLCL: {
246 gco2lcl(o)->gclist = g->gray; 245 linkgclist(gco2lcl(o), g->gray);
247 g->gray = o;
248 break; 246 break;
249 } 247 }
250 case LUA_TCCL: { 248 case LUA_TCCL: {
251 gco2ccl(o)->gclist = g->gray; 249 linkgclist(gco2ccl(o), g->gray);
252 g->gray = o;
253 break; 250 break;
254 } 251 }
255 case LUA_TTABLE: { 252 case LUA_TTABLE: {
256 linktable(gco2t(o), &g->gray); 253 linkgclist(gco2t(o), g->gray);
257 break; 254 break;
258 } 255 }
259 case LUA_TTHREAD: { 256 case LUA_TTHREAD: {
260 gco2th(o)->gclist = g->gray; 257 linkgclist(gco2th(o), g->gray);
261 g->gray = o;
262 break; 258 break;
263 } 259 }
264 case LUA_TPROTO: { 260 case LUA_TPROTO: {
265 gco2p(o)->gclist = g->gray; 261 linkgclist(gco2p(o), g->gray);
266 g->gray = o;
267 break; 262 break;
268 } 263 }
269 default: lua_assert(0); break; 264 default: lua_assert(0); break;
@@ -357,9 +352,9 @@ static void traverseweakvalue (global_State *g, Table *h) {
357 } 352 }
358 } 353 }
359 if (hasclears) 354 if (hasclears)
360 linktable(h, &g->weak); /* has to be cleared later */ 355 linkgclist(h, g->weak); /* has to be cleared later */
361 else /* no white values */ 356 else /* no white values */
362 linktable(h, &g->grayagain); /* no need to clean */ 357 linkgclist(h, g->grayagain); /* no need to clean */
363} 358}
364 359
365 360
@@ -392,11 +387,11 @@ static int traverseephemeron (global_State *g, Table *h) {
392 } 387 }
393 } 388 }
394 if (prop) 389 if (prop)
395 linktable(h, &g->ephemeron); /* have to propagate again */ 390 linkgclist(h, g->ephemeron); /* have to propagate again */
396 else if (hasclears) /* does table have white keys? */ 391 else if (hasclears) /* does table have white keys? */
397 linktable(h, &g->allweak); /* may have to clean white keys */ 392 linkgclist(h, g->allweak); /* may have to clean white keys */
398 else /* no white keys */ 393 else /* no white keys */
399 linktable(h, &g->grayagain); /* no need to clean */ 394 linkgclist(h, g->grayagain); /* no need to clean */
400 return marked; 395 return marked;
401} 396}
402 397
@@ -433,7 +428,7 @@ static lu_mem traversetable (global_State *g, Table *h) {
433 else if (!weakvalue) /* strong values? */ 428 else if (!weakvalue) /* strong values? */
434 traverseephemeron(g, h); 429 traverseephemeron(g, h);
435 else /* all weak */ 430 else /* all weak */
436 linktable(h, &g->allweak); /* nothing to traverse now */ 431 linkgclist(h, g->allweak); /* nothing to traverse now */
437 } 432 }
438 else /* not weak */ 433 else /* not weak */
439 traversestrongtable(g, h); 434 traversestrongtable(g, h);
@@ -548,8 +543,7 @@ static void propagatemark (global_State *g) {
548 case LUA_TTHREAD: { 543 case LUA_TTHREAD: {
549 lua_State *th = gco2th(o); 544 lua_State *th = gco2th(o);
550 g->gray = th->gclist; /* remove from 'gray' list */ 545 g->gray = th->gclist; /* remove from 'gray' list */
551 th->gclist = g->grayagain; 546 linkgclist(th, g->grayagain); /* insert into 'grayagain' list */
552 g->grayagain = o; /* insert into 'grayagain' list */
553 black2gray(o); 547 black2gray(o);
554 size = traversethread(g, th); 548 size = traversethread(g, th);
555 break; 549 break;