Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/ceguilua/src/lua/lgc.h @ 2068

Last change on this file since 2068 was 1806, checked in by rgrieder, 16 years ago

added single 5.1.3 directory for lua since CEGUILua 0.5 can also build against lua 5.1

  • Property svn:eol-style set to native
File size: 3.1 KB
RevLine 
[1806]1/*
2** $Id: lgc.h,v 2.15.1.1 2007/12/27 13:02:25 roberto Exp $
3** Garbage Collector
4** See Copyright Notice in lua.h
5*/
6
7#ifndef lgc_h
8#define lgc_h
9
10
11#include "lobject.h"
12
13
14/*
15** Possible states of the Garbage Collector
16*/
17#define GCSpause        0
18#define GCSpropagate    1
19#define GCSsweepstring  2
20#define GCSsweep        3
21#define GCSfinalize     4
22
23
24/*
25** some userful bit tricks
26*/
27#define resetbits(x,m)  ((x) &= cast(lu_byte, ~(m)))
28#define setbits(x,m)    ((x) |= (m))
29#define testbits(x,m)   ((x) & (m))
30#define bitmask(b)      (1<<(b))
31#define bit2mask(b1,b2) (bitmask(b1) | bitmask(b2))
32#define l_setbit(x,b)   setbits(x, bitmask(b))
33#define resetbit(x,b)   resetbits(x, bitmask(b))
34#define testbit(x,b)    testbits(x, bitmask(b))
35#define set2bits(x,b1,b2)       setbits(x, (bit2mask(b1, b2)))
36#define reset2bits(x,b1,b2)     resetbits(x, (bit2mask(b1, b2)))
37#define test2bits(x,b1,b2)      testbits(x, (bit2mask(b1, b2)))
38
39
40
41/*
42** Layout for bit use in `marked' field:
43** bit 0 - object is white (type 0)
44** bit 1 - object is white (type 1)
45** bit 2 - object is black
46** bit 3 - for userdata: has been finalized
47** bit 3 - for tables: has weak keys
48** bit 4 - for tables: has weak values
49** bit 5 - object is fixed (should not be collected)
50** bit 6 - object is "super" fixed (only the main thread)
51*/
52
53
54#define WHITE0BIT       0
55#define WHITE1BIT       1
56#define BLACKBIT        2
57#define FINALIZEDBIT    3
58#define KEYWEAKBIT      3
59#define VALUEWEAKBIT    4
60#define FIXEDBIT        5
61#define SFIXEDBIT       6
62#define WHITEBITS       bit2mask(WHITE0BIT, WHITE1BIT)
63
64
65#define iswhite(x)      test2bits((x)->gch.marked, WHITE0BIT, WHITE1BIT)
66#define isblack(x)      testbit((x)->gch.marked, BLACKBIT)
67#define isgray(x)       (!isblack(x) && !iswhite(x))
68
69#define otherwhite(g)   (g->currentwhite ^ WHITEBITS)
70#define isdead(g,v)     ((v)->gch.marked & otherwhite(g) & WHITEBITS)
71
72#define changewhite(x)  ((x)->gch.marked ^= WHITEBITS)
73#define gray2black(x)   l_setbit((x)->gch.marked, BLACKBIT)
74
75#define valiswhite(x)   (iscollectable(x) && iswhite(gcvalue(x)))
76
77#define luaC_white(g)   cast(lu_byte, (g)->currentwhite & WHITEBITS)
78
79
80#define luaC_checkGC(L) { \
81  condhardstacktests(luaD_reallocstack(L, L->stacksize - EXTRA_STACK - 1)); \
82  if (G(L)->totalbytes >= G(L)->GCthreshold) \
83        luaC_step(L); }
84
85
86#define luaC_barrier(L,p,v) { if (valiswhite(v) && isblack(obj2gco(p)))  \
87        luaC_barrierf(L,obj2gco(p),gcvalue(v)); }
88
89#define luaC_barriert(L,t,v) { if (valiswhite(v) && isblack(obj2gco(t)))  \
90        luaC_barrierback(L,t); }
91
92#define luaC_objbarrier(L,p,o)  \
93        { if (iswhite(obj2gco(o)) && isblack(obj2gco(p))) \
94                luaC_barrierf(L,obj2gco(p),obj2gco(o)); }
95
96#define luaC_objbarriert(L,t,o)  \
97   { if (iswhite(obj2gco(o)) && isblack(obj2gco(t))) luaC_barrierback(L,t); }
98
99LUAI_FUNC size_t luaC_separateudata (lua_State *L, int all);
100LUAI_FUNC void luaC_callGCTM (lua_State *L);
101LUAI_FUNC void luaC_freeall (lua_State *L);
102LUAI_FUNC void luaC_step (lua_State *L);
103LUAI_FUNC void luaC_fullgc (lua_State *L);
104LUAI_FUNC void luaC_link (lua_State *L, GCObject *o, lu_byte tt);
105LUAI_FUNC void luaC_linkupval (lua_State *L, UpVal *uv);
106LUAI_FUNC void luaC_barrierf (lua_State *L, GCObject *o, GCObject *v);
107LUAI_FUNC void luaC_barrierback (lua_State *L, Table *t);
108
109
110#endif
Note: See TracBrowser for help on using the repository browser.