From 4df8800a01c7e44800ce59339c66b9257cd75c2a Mon Sep 17 00:00:00 2001 From: Roberto Ierusalimschy Date: Thu, 10 Feb 2005 11:25:02 -0200 Subject: cleaner way to free all objects --- lgc.h | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) (limited to 'lgc.h') diff --git a/lgc.h b/lgc.h index bec5a728..c3039ee4 100644 --- a/lgc.h +++ b/lgc.h @@ -1,5 +1,5 @@ /* -** $Id: lgc.h,v 2.9 2004/09/15 20:38:15 roberto Exp $ +** $Id: lgc.h,v 2.10 2005/01/19 15:54:26 roberto Exp roberto $ ** Garbage Collector ** See Copyright Notice in lua.h */ @@ -47,8 +47,10 @@ ** bit 3 - for tables: has weak keys ** bit 4 - for tables: has weak values ** bit 5 - object is fixed (should not be collected) +** bit 6 - object is "super" fixed (only the main thread) */ + #define WHITE0BIT 0 #define WHITE1BIT 1 #define BLACKBIT 2 @@ -56,21 +58,23 @@ #define KEYWEAKBIT 3 #define VALUEWEAKBIT 4 #define FIXEDBIT 5 +#define SFIXEDBIT 6 +#define WHITEBITS bit2mask(WHITE0BIT, WHITE1BIT) #define iswhite(x) test2bits((x)->gch.marked, WHITE0BIT, WHITE1BIT) #define isblack(x) testbit((x)->gch.marked, BLACKBIT) #define isgray(x) (!isblack(x) && !iswhite(x)) -#define otherwhite(g) (g->currentwhite ^ bit2mask(WHITE0BIT, WHITE1BIT)) -#define isdead(g,v) ((v)->gch.marked & otherwhite(g)) +#define otherwhite(g) (g->currentwhite ^ WHITEBITS) +#define isdead(g,v) ((v)->gch.marked & otherwhite(g) & WHITEBITS) -#define changewhite(x) ((x)->gch.marked ^= bit2mask(WHITE0BIT, WHITE1BIT)) +#define changewhite(x) ((x)->gch.marked ^= WHITEBITS) #define gray2black(x) setbit((x)->gch.marked, BLACKBIT) #define valiswhite(x) (iscollectable(x) && iswhite(gcvalue(x))) -#define luaC_white(g) cast(lu_byte, (g)->currentwhite) +#define luaC_white(g) cast(lu_byte, (g)->currentwhite & WHITEBITS) #define luaC_checkGC(L) { if (G(L)->totalbytes >= G(L)->GCthreshold) \ -- cgit v1.2.3-55-g6feb