diff options
author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2014-09-01 14:37:11 -0300 |
---|---|---|
committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2014-09-01 14:37:11 -0300 |
commit | df608f842ab20a878cf8ed337a4066f5567786a5 (patch) | |
tree | b8e45cf1d794cd04b9069025e5d25b7d1e443377 | |
parent | 001bb46ae1b2bc0b3ce514f4a98e431656046e97 (diff) | |
download | lua-df608f842ab20a878cf8ed337a4066f5567786a5.tar.gz lua-df608f842ab20a878cf8ed337a4066f5567786a5.tar.bz2 lua-df608f842ab20a878cf8ed337a4066f5567786a5.zip |
'linktable' -> 'linkgclist' (and used for all links with 'gclist')
-rw-r--r-- | lgc.c | 38 |
1 files changed, 16 insertions, 22 deletions
@@ -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; |