diff options
Diffstat (limited to 'lgc.h')
-rw-r--r-- | lgc.h | 17 |
1 files changed, 12 insertions, 5 deletions
@@ -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); | |||
101 | LUAI_FUNC void luaC_linkupval (lua_State *L, UpVal *uv); | 107 | LUAI_FUNC void luaC_linkupval (lua_State *L, UpVal *uv); |
102 | LUAI_FUNC void luaC_barrierf (lua_State *L, GCObject *o, GCObject *v); | 108 | LUAI_FUNC void luaC_barrierf (lua_State *L, GCObject *o, GCObject *v); |
103 | LUAI_FUNC void luaC_barrierback (lua_State *L, Table *t); | 109 | LUAI_FUNC void luaC_barrierback (lua_State *L, Table *t); |
110 | LUAI_FUNC void luaC_checkfinalizer (lua_State *L, Udata *u); | ||
104 | 111 | ||
105 | 112 | ||
106 | #endif | 113 | #endif |