aboutsummaryrefslogtreecommitdiff
path: root/lgc.h
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>2008-06-26 16:42:45 -0300
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>2008-06-26 16:42:45 -0300
commit0c8f5fc2fdcadc8fe6e89c32bf3a1f7456328899 (patch)
tree3c62e2e59064196eca2fe662196e73e3c45b63cd /lgc.h
parent1527d8f00d4a99997cf73f50fe159ddba8681f8f (diff)
downloadlua-0c8f5fc2fdcadc8fe6e89c32bf3a1f7456328899.tar.gz
lua-0c8f5fc2fdcadc8fe6e89c32bf3a1f7456328899.tar.bz2
lua-0c8f5fc2fdcadc8fe6e89c32bf3a1f7456328899.zip
simplification in the handling of finalizers: no more 'tmudata' list +
no more GCSsweeptmu collector's state
Diffstat (limited to 'lgc.h')
-rw-r--r--lgc.h30
1 files changed, 14 insertions, 16 deletions
diff --git a/lgc.h b/lgc.h
index 6697ec26..1f6ba08e 100644
--- a/lgc.h
+++ b/lgc.h
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: lgc.h,v 2.17 2007/10/29 16:51:20 roberto Exp roberto $ 2** $Id: lgc.h,v 2.18 2008/02/19 18:55:09 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,26 +17,24 @@
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 GCSsweeptmu 3 20#define GCSsweep 3
21#define GCSsweep 4 21#define GCSfinalize 4
22#define GCSfinalize 5
23 22
24 23
25#define issweep(g) \ 24#define issweep(g) (GCSsweepstring <= (g)->gcstate && (g)->gcstate <= GCSsweep)
26 (GCSsweepstring <= (g)->gcstate && (g)->gcstate <= GCSsweep)
27 25
28 26
29/* 27/*
30** some userful bit tricks 28** some userful bit tricks
31*/ 29*/
32#define resetbits(x,m) ((x) &= cast(lu_byte, ~(m))) 30#define resetbits(x,m) ((x) &= cast(lu_byte, ~(m)))
33#define setbits(x,m) ((x) |= (m)) 31#define setbits(x,m) ((x) |= (m))
34#define testbits(x,m) ((x) & (m)) 32#define testbits(x,m) ((x) & (m))
35#define bitmask(b) (1<<(b)) 33#define bitmask(b) (1<<(b))
36#define bit2mask(b1,b2) (bitmask(b1) | bitmask(b2)) 34#define bit2mask(b1,b2) (bitmask(b1) | bitmask(b2))
37#define l_setbit(x,b) setbits(x, bitmask(b)) 35#define l_setbit(x,b) setbits(x, bitmask(b))
38#define resetbit(x,b) resetbits(x, bitmask(b)) 36#define resetbit(x,b) resetbits(x, bitmask(b))
39#define testbit(x,b) testbits(x, bitmask(b)) 37#define testbit(x,b) testbits(x, bitmask(b))
40#define set2bits(x,b1,b2) setbits(x, (bit2mask(b1, b2))) 38#define set2bits(x,b1,b2) setbits(x, (bit2mask(b1, b2)))
41#define reset2bits(x,b1,b2) resetbits(x, (bit2mask(b1, b2))) 39#define reset2bits(x,b1,b2) resetbits(x, (bit2mask(b1, b2)))
42 40
@@ -48,7 +46,7 @@
48** bit 1 - object is white (type 1) 46** bit 1 - object is white (type 1)
49** bit 2 - object is black 47** bit 2 - object is black
50** bit 3 - for userdata: has been finalized 48** bit 3 - for userdata: has been finalized
51** bit 4 - for userdata: it's not in rootgc list (it's in tmudata or tobefnz) 49** bit 4 - for userdata: it's in 2nd part of rootgc list or in tobefnz
52** bit 5 - object is fixed (should not be collected) 50** bit 5 - object is fixed (should not be collected)
53** bit 6 - object is "super" fixed (only the main thread) 51** bit 6 - object is "super" fixed (only the main thread)
54*/ 52*/
@@ -99,7 +97,7 @@
99 { if (iswhite(obj2gco(o)) && isblack(obj2gco(t))) luaC_barrierback(L,t); } 97 { if (iswhite(obj2gco(o)) && isblack(obj2gco(t))) luaC_barrierback(L,t); }
100 98
101LUAI_FUNC size_t luaC_separateudata (lua_State *L, int all); 99LUAI_FUNC size_t luaC_separateudata (lua_State *L, int all);
102LUAI_FUNC void luaC_callGCTM (lua_State *L); 100LUAI_FUNC void luaC_callAllGCTM (lua_State *L);
103LUAI_FUNC void luaC_freeall (lua_State *L); 101LUAI_FUNC void luaC_freeall (lua_State *L);
104LUAI_FUNC void luaC_step (lua_State *L); 102LUAI_FUNC void luaC_step (lua_State *L);
105LUAI_FUNC void luaC_fullgc (lua_State *L, int isemergency); 103LUAI_FUNC void luaC_fullgc (lua_State *L, int isemergency);