aboutsummaryrefslogtreecommitdiff
path: root/lgc.h
diff options
context:
space:
mode:
Diffstat (limited to 'lgc.h')
-rw-r--r--lgc.h17
1 files changed, 12 insertions, 5 deletions
diff --git a/lgc.h b/lgc.h
index 0b7be15e..6697ec26 100644
--- a/lgc.h
+++ b/lgc.h
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: lgc.h,v 2.16 2006/07/11 15:53:29 roberto Exp roberto $ 2** $Id: lgc.h,v 2.17 2007/10/29 16:51:20 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*/
@@ -17,8 +17,13 @@
17#define GCSpause 0 17#define GCSpause 0
18#define GCSpropagate 1 18#define GCSpropagate 1
19#define GCSsweepstring 2 19#define GCSsweepstring 2
20#define GCSsweep 3 20#define GCSsweeptmu 3
21#define GCSfinalize 4 21#define GCSsweep 4
22#define GCSfinalize 5
23
24
25#define issweep(g) \
26 (GCSsweepstring <= (g)->gcstate && (g)->gcstate <= GCSsweep)
22 27
23 28
24/* 29/*
@@ -34,7 +39,6 @@
34#define testbit(x,b) testbits(x, bitmask(b)) 39#define testbit(x,b) testbits(x, bitmask(b))
35#define set2bits(x,b1,b2) setbits(x, (bit2mask(b1, b2))) 40#define set2bits(x,b1,b2) setbits(x, (bit2mask(b1, b2)))
36#define reset2bits(x,b1,b2) resetbits(x, (bit2mask(b1, b2))) 41#define reset2bits(x,b1,b2) resetbits(x, (bit2mask(b1, b2)))
37#define test2bits(x,b1,b2) testbits(x, (bit2mask(b1, b2)))
38 42
39 43
40 44
@@ -44,6 +48,7 @@
44** bit 1 - object is white (type 1) 48** bit 1 - object is white (type 1)
45** bit 2 - object is black 49** bit 2 - object is black
46** bit 3 - for userdata: has been finalized 50** bit 3 - for userdata: has been finalized
51** bit 4 - for userdata: it's not in rootgc list (it's in tmudata or tobefnz)
47** bit 5 - object is fixed (should not be collected) 52** bit 5 - object is fixed (should not be collected)
48** bit 6 - object is "super" fixed (only the main thread) 53** bit 6 - object is "super" fixed (only the main thread)
49*/ 54*/
@@ -53,12 +58,13 @@
53#define WHITE1BIT 1 58#define WHITE1BIT 1
54#define BLACKBIT 2 59#define BLACKBIT 2
55#define FINALIZEDBIT 3 60#define FINALIZEDBIT 3
61#define SEPARATED 4
56#define FIXEDBIT 5 62#define FIXEDBIT 5
57#define SFIXEDBIT 6 63#define SFIXEDBIT 6
58#define WHITEBITS bit2mask(WHITE0BIT, WHITE1BIT) 64#define WHITEBITS bit2mask(WHITE0BIT, WHITE1BIT)
59 65
60 66
61#define iswhite(x) test2bits((x)->gch.marked, WHITE0BIT, WHITE1BIT) 67#define iswhite(x) testbits((x)->gch.marked, WHITEBITS)
62#define isblack(x) testbit((x)->gch.marked, BLACKBIT) 68#define isblack(x) testbit((x)->gch.marked, BLACKBIT)
63#define isgray(x) (!isblack(x) && !iswhite(x)) 69#define isgray(x) (!isblack(x) && !iswhite(x))
64 70
@@ -101,6 +107,7 @@ LUAI_FUNC void luaC_link (lua_State *L, GCObject *o, lu_byte tt);
101LUAI_FUNC void luaC_linkupval (lua_State *L, UpVal *uv); 107LUAI_FUNC void luaC_linkupval (lua_State *L, UpVal *uv);
102LUAI_FUNC void luaC_barrierf (lua_State *L, GCObject *o, GCObject *v); 108LUAI_FUNC void luaC_barrierf (lua_State *L, GCObject *o, GCObject *v);
103LUAI_FUNC void luaC_barrierback (lua_State *L, Table *t); 109LUAI_FUNC void luaC_barrierback (lua_State *L, Table *t);
110LUAI_FUNC void luaC_checkfinalizer (lua_State *L, Udata *u);
104 111
105 112
106#endif 113#endif