42 #define setbit(x,b) ((x) |= (1<<(b)))
43 #define resetbit(x,b) ((x) &= cast(lu_byte, ~(1<<(b))))
44 #define testbit(x,b) ((x) & (1<<(b)))
46 #define unmark(x) resetbit((x)->gch.marked, 0)
47 #define ismarked(x) ((x)->gch.marked & ((1<<4)|1))
49 #define stringmark(s) setbit((s)->tsv.marked, 0)
52 #define isfinalized(u) (!testbit((u)->uv.marked, 1))
53 #define markfinalized(u) resetbit((u)->uv.marked, 1)
57 #define VALUEWEAKBIT 2
58 #define KEYWEAK (1<<KEYWEAKBIT)
59 #define VALUEWEAK (1<<VALUEWEAKBIT)
63 #define markobject(st,o) { checkconsistency(o); \
64 if (iscollectable(o) && !ismarked(gcvalue(o))) reallymarkobject(st,gcvalue(o)); }
66 #define condmarkobject(st,o,c) { checkconsistency(o); \
67 if (iscollectable(o) && !ismarked(gcvalue(o)) && (c)) \
68 reallymarkobject(st,gcvalue(o)); }
70 #define markvalue(st,t) { if (!ismarked(valtogco(t))) \
71 reallymarkobject(st, valtogco(t)); }
129 GCObject **lastcollected = &collected;
130 while ((curr = *p) != NULL) {
143 *lastcollected = curr;
144 lastcollected = &curr->
gch.
next;
149 *lastcollected =
G(L)->tmudata;
151 G(L)->tmudata = collected;
176 weakkey = (strchr(
svalue(mode),
'k') != NULL);
177 weakvalue = (strchr(
svalue(mode),
'v') != NULL);
178 if (weakkey || weakvalue) {
183 weaklist = (weakkey && weakvalue) ? &st->
wkv :
184 (weakkey) ? &st->
wk :
212 for (i=0; i<f->
sizek; i++) {
218 for (i=0; i<f->
sizep; i++)
255 if (4*used < L->size_ci && 2*BASIC_CI_SIZE < L->size_ci)
258 used = max - L->
stack;
272 for (ci = L1->
base_ci; ci <= L1->ci; ci++) {
278 for (o = L1->
stack; o < L1->top; o++)
280 for (; o <= lim; o++)
297 case LUA_TFUNCTION: {
395 case LUA_TUSERDATA: {
409 while ((curr = *p) != NULL) {
430 for (i=0; i<
G(L)->strt.size; i++) {
431 G(L)->strt.nuse -=
sweeplist(L, &
G(L)->strt.hash[i], all);
448 G(L)->GCthreshold = 2*
G(L)->nblocks - deadmem;
469 while (
G(L)->tmudata != NULL) {
472 G(L)->tmudata = udata->
uv.
next;
473 udata->
uv.
next =
G(L)->rootudata;
536 size_t deadmem =
mark(L);