From b373a40133800b53f23a7b2df721b7c6892d1797 Mon Sep 17 00:00:00 2001 From: Roberto Ierusalimschy Date: Fri, 7 May 2010 15:08:05 -0300 Subject: new macro 'isgenerational' + new macro 'isold' + better deffinition for 'isdead', compatible with the code used by 'sweeplist' --- lgc.h | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/lgc.h b/lgc.h index d7b34938..3b279c94 100644 --- a/lgc.h +++ b/lgc.h @@ -1,5 +1,5 @@ /* -** $Id: lgc.h,v 2.36 2010/05/05 18:53:41 roberto Exp roberto $ +** $Id: lgc.h,v 2.37 2010/05/06 18:17:22 roberto Exp roberto $ ** Garbage Collector ** See Copyright Notice in lua.h */ @@ -39,6 +39,7 @@ #define issweepphase(g) \ (GCSsweepstring <= (g)->gcstate && (g)->gcstate <= GCSsweep) +#define isgenerational(g) ((g)->gckind == KGC_GEN) /* ** macro to tell when main invariant (white objects cannot point to black @@ -48,7 +49,7 @@ ** all objects are white again. During a generational collection, the ** invariant must be kept all times. */ -#define keepinvariant(g) (g->gckind == KGC_GEN || g->gcstate <= GCSatomic) +#define keepinvariant(g) (isgenerational(g) || g->gcstate <= GCSatomic) #define gcstopped(g) ((g)->GCdebt == MIN_LMEM) @@ -87,8 +88,11 @@ #define isblack(x) testbit((x)->gch.marked, BLACKBIT) #define isgray(x) (!isblack(x) && !iswhite(x)) +#define isold(x) testbit((x)->gch.marked, OLDBIT) + #define otherwhite(g) (g->currentwhite ^ WHITEBITS) -#define isdead(g,v) ((v)->gch.marked & otherwhite(g) & WHITEBITS) +#define isdeadm(ow,m) (!(((m) ^ WHITEBITS) & (ow))) +#define isdead(g,v) isdeadm(otherwhite(g), (v)->gch.marked) #define changewhite(x) ((x)->gch.marked ^= WHITEBITS) #define gray2black(x) l_setbit((x)->gch.marked, BLACKBIT) -- cgit v1.2.3-55-g6feb