26#define GCSTEPSIZE 1024u
29#define GCFINALIZECOST 100
32#define maskmarks cast_byte(~(bitmask(BLACKBIT)|WHITEBITS))
34#define makewhite(g,x) \
35 ((x)->gch.marked = cast_byte(((x)->gch.marked & maskmarks) | luaC_white(g)))
37#define white2gray(x) reset2bits((x)->gch.marked, WHITE0BIT, WHITE1BIT)
38#define black2gray(x) resetbit((x)->gch.marked, BLACKBIT)
40#define stringmark(s) reset2bits((s)->tsv.marked, WHITE0BIT, WHITE1BIT)
43#define isfinalized(u) testbit((u)->marked, FINALIZEDBIT)
44#define markfinalized(u) l_setbit((u)->marked, FINALIZEDBIT)
47#define KEYWEAK bitmask(KEYWEAKBIT)
48#define VALUEWEAK bitmask(VALUEWEAKBIT)
52#define markvalue(g,o) { checkconsistency(o); \
53 if (iscollectable(o) && iswhite(gcvalue(o))) reallymarkobject(g,gcvalue(o)); }
55#define markobject(g,t) { if (iswhite(obj2gco(t))) \
56 reallymarkobject(g, obj2gco(t)); }
59#define setthreshold(g) (g->GCthreshold = (g->estimate/100) * g->gcpause)
133 while ((curr = *p) !=
NULL) {
167 weakkey = (strchr(
svalue(mode),
'k') !=
NULL);
168 weakvalue = (strchr(
svalue(mode),
'v') !=
NULL);
169 if (weakkey || weakvalue) {
177 if (weakkey && weakvalue)
return 1;
195 return weakkey || weakvalue;
206 for (i=0; i<f->
sizek; i++)
212 for (i=0; i<f->
sizep; i++) {
228 for (i=0; i<cl->
c.nupvalues; i++)
235 for (i=0; i<cl->
l.nupvalues; i++)
246 if (4*ci_used < L->size_ci && 2*BASIC_CI_SIZE < L->size_ci)
261 for (ci = l->
base_ci; ci <= l->
ci; ci++) {
263 if (lim < ci->top) lim = ci->
top;
267 for (; o <= lim; o++)
292 g->
gray = cl->
c.gclist;
404#define sweepwholelist(L,p) sweeplist(L,p,MAX_LUMEM)
411 while ((curr = *p) !=
NULL && count-- > 0) {
478 while (
G(L)->tmudata)
void luaD_reallocCI(lua_State *L, int newsize)
void luaD_call(lua_State *L, StkId func, int nResults)
void luaD_reallocstack(lua_State *L, int newsize)
void luaF_freeproto(lua_State *L, Proto *f)
void luaF_freeclosure(lua_State *L, Closure *c)
void luaF_freeupval(lua_State *L, UpVal *uv)
void luaC_callGCTM(lua_State *L)
static void marktmu(global_State *g)
size_t luaC_separateudata(lua_State *L, int all)
void luaC_barrierf(lua_State *L, GCObject *o, GCObject *v)
static void checkstacksizes(lua_State *L, StkId max)
static void traverseproto(global_State *g, Proto *f)
void luaC_fullgc(lua_State *L)
static void atomic(lua_State *L)
void luaC_freeall(lua_State *L)
static size_t propagateall(global_State *g)
#define sweepwholelist(L, p)
static void markroot(lua_State *L)
static void removeentry(Node *n)
static void traversestack(global_State *g, lua_State *l)
static int traversetable(global_State *g, Table *h)
static void remarkupvals(global_State *g)
void luaC_link(lua_State *L, GCObject *o, lu_byte tt)
static int iscleared(const TValue *o, int iskey)
static void markmt(global_State *g)
static void freeobj(lua_State *L, GCObject *o)
static void checkSizes(lua_State *L)
static void reallymarkobject(global_State *g, GCObject *o)
static void GCTM(lua_State *L)
void luaC_step(lua_State *L)
static l_mem singlestep(lua_State *L)
static l_mem propagatemark(global_State *g)
static GCObject ** sweeplist(lua_State *L, GCObject **p, lu_mem count)
void luaC_linkupval(lua_State *L, UpVal *uv)
static void traverseclosure(global_State *g, Closure *cl)
static void cleartable(GCObject *l)
#define luaC_barrier(L, p, v)
#define condhardstacktests(x)
#define luaM_freemem(L, b, s)
#define setttype(obj, tt)
#define setuvalue(L, obj, x)
void luaE_freethread(lua_State *L, lua_State *L1)
void luaS_resize(lua_State *L, int newsize)
void luaH_free(lua_State *L, Table *t)
#define gfasttm(g, et, e)
struct lua_State lua_State
#define luaZ_sizebuffer(buff)
#define luaZ_resizebuffer(L, buff, size)
#define luaC_barrierback(L, p, v)
struct lua_State * mainthread
struct Table * mt[NUM_TAGS]