diff options
| author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2008-02-19 15:55:09 -0300 |
|---|---|---|
| committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2008-02-19 15:55:09 -0300 |
| commit | e2b366c7601aeecda04f3b7ac5a2bd6eb80521bb (patch) | |
| tree | 580c94105007087a5029fcb02a0e3cb3be306b54 /lgc.h | |
| parent | fa19baab7ffd96cecb1defe4ad81084c612d2704 (diff) | |
| download | lua-e2b366c7601aeecda04f3b7ac5a2bd6eb80521bb.tar.gz lua-e2b366c7601aeecda04f3b7ac5a2bd6eb80521bb.tar.bz2 lua-e2b366c7601aeecda04f3b7ac5a2bd6eb80521bb.zip | |
userdata with finalizers are kept in a separated list
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 |
