浏览该文件的文档.
31 #define GCSpropagate 0
32 #define GCSenteratomic 1
35 #define GCSswpfinobj 4
36 #define GCSswptobefnz 5
42 #define issweepphase(g) \
43 (GCSswpallgc <= (g)->gcstate && (g)->gcstate <= GCSswpend)
54 #define keepinvariant(g) ((g)->gcstate <= GCSatomic)
60 #define resetbits(x,m) ((x) &= cast_byte(~(m)))
61 #define setbits(x,m) ((x) |= (m))
62 #define testbits(x,m) ((x) & (m))
63 #define bitmask(b) (1<<(b))
64 #define bit2mask(b1,b2) (bitmask(b1) | bitmask(b2))
65 #define l_setbit(x,b) setbits(x, bitmask(b))
66 #define resetbit(x,b) resetbits(x, bitmask(b))
67 #define testbit(x,b) testbits(x, bitmask(b))
78 #define FINALIZEDBIT 6
84 #define WHITEBITS bit2mask(WHITE0BIT, WHITE1BIT)
87 #define iswhite(x) testbits((x)->marked, WHITEBITS)
88 #define isblack(x) testbit((x)->marked, BLACKBIT)
90 (!testbits((x)->marked, WHITEBITS | bitmask(BLACKBIT)))
92 #define tofinalize(x) testbit((x)->marked, FINALIZEDBIT)
94 #define otherwhite(g) ((g)->currentwhite ^ WHITEBITS)
95 #define isdeadm(ow,m) ((m) & (ow))
96 #define isdead(g,v) isdeadm(otherwhite(g), (v)->marked)
98 #define changewhite(x) ((x)->marked ^= WHITEBITS)
100 check_exp(!iswhite(x), l_setbit((x)->marked, BLACKBIT))
102 #define luaC_white(g) cast_byte((g)->currentwhite & WHITEBITS)
116 #define getage(o) ((o)->marked & AGEBITS)
117 #define setage(o,a) ((o)->marked = cast_byte(((o)->marked & (~AGEBITS)) | a))
118 #define isold(o) (getage(o) > G_SURVIVAL)
120 #define changeage(o,f,t) \
121 check_exp(getage(o) == (f), (o)->marked ^= ((f)^(t)))
125 #define LUAI_GENMAJORMUL 100
126 #define LUAI_GENMINORMUL 20
129 #define LUAI_GCPAUSE 200
135 #define getgcparam(p) ((p) * 4)
136 #define setgcparam(p,v) ((p) = (v) / 4)
138 #define LUAI_GCMUL 100
141 #define LUAI_GCSTEPSIZE 13
149 #define isdecGCmodegen(g) (g->gckind == KGC_GEN || g->lastatomic != 0)
157 #define luaC_condGC(L,pre,pos) \
158 { if (G(L)->GCdebt > 0) { pre; luaC_step(L); pos;}; \
159 condchangemem(L,pre,pos); }
162 #define luaC_checkGC(L) luaC_condGC(L,(void)0,(void)0)
165 #define luaC_barrier(L,p,v) ( \
166 (iscollectable(v) && isblack(p) && iswhite(gcvalue(v))) ? \
167 luaC_barrier_(L,obj2gco(p),gcvalue(v)) : cast_void(0))
169 #define luaC_barrierback(L,p,v) ( \
170 (iscollectable(v) && isblack(p) && iswhite(gcvalue(v))) ? \
171 luaC_barrierback_(L,p) : cast_void(0))
173 #define luaC_objbarrier(L,p,o) ( \
174 (isblack(p) && iswhite(o)) ? \
175 luaC_barrier_(L,obj2gco(p),obj2gco(o)) : cast_void(0))
#define LUA_VTHREAD
Definition: lobject.h:240
#define GCScallfin
Definition: lgc.h:38
void luaE_warnerror(lua_State *L, const char *where)
Definition: lstate.c:419
#define EXTRA_STACK
Definition: lstate.h:137
#define s2v(o)
Definition: lobject.h:150
GCObject * luaC_newobj(lua_State *L, int tt, size_t sz)
Definition: lgc.c:258
#define iswhite(x)
Definition: lgc.h:87
lu_mem lastatomic
Definition: lstate.h:225
#define GCFINALIZECOST
Definition: lgc.c:46
static int remarkupvals(global_State *g)
Definition: lgc.c:361
#define maskgcbits
Definition: lgc.c:67
#define tofinalize(x)
Definition: lgc.h:92
Upvaldesc * upvalues
Definition: lobject.h:547
void luaC_barrierback_(lua_State *L, GCObject *o)
Definition: lgc.c:230
static void deletelist(lua_State *L, GCObject *p, GCObject *limit)
Definition: lgc.c:1490
static void reallymarkobject(global_State *g, GCObject *o)
Definition: lgc.c:291
#define G_SURVIVAL
Definition: lgc.h:107
#define lua_assert(c)
Definition: lauxlib.h:169
static lu_mem entergen(lua_State *L, global_State *g)
Definition: lgc.c:1293
#define LUAI_FUNC
Definition: luaconf.h:307
static void restartcollection(global_State *g)
Definition: lgc.c:397
static void cleargraylists(global_State *g)
Definition: lgc.c:388
#define cast_byte(i)
Definition: llimits.h:130
void luaH_free(lua_State *L, Table *t)
Definition: ltable.c:608
#define cast(t, exp)
Definition: llimits.h:123
#define isdecGCmodegen(g)
Definition: lgc.h:149
static void stepgenfull(lua_State *L, global_State *g)
Definition: lgc.c:1374
#define LUA_NUMTAGS
Definition: lua.h:415
#define novariant(t)
Definition: lobject.h:78
static int traverseLclosure(global_State *g, LClosure *cl)
Definition: lgc.c:598
static int traverseudata(global_State *g, Udata *u)
Definition: lgc.c:557
#define bitmask(b)
Definition: lgc.h:63
#define LUA_OK
Definition: lua.h:49
#define linkobjgclist(o, p)
Definition: lgc.c:159
static void enterinc(global_State *g)
Definition: lgc.c:1308
static void fullinc(lua_State *L, global_State *g)
Definition: lgc.c:1685
static void markmt(global_State *g)
Definition: lgc.c:329
void luaF_freeproto(lua_State *L, Proto *f)
Definition: lfunc.c:273
void luaC_checkfinalizer(lua_State *L, GCObject *o, Table *mt)
Definition: lgc.c:1011
#define WORK2MEM
Definition: lgc.c:53
#define GCSswpallgc
Definition: lgc.h:34
TValue l_registry
Definition: lstate.h:227
#define gco2ts(o)
Definition: lstate.h:330
GCObject * old1
Definition: lstate.h:252
#define LUA_TSTRING
Definition: lua.h:69
static void GCTM(lua_State *L)
Definition: lgc.c:899
TString * varname
Definition: lobject.h:506
#define unlikely(x)
Definition: llimits.h:162
static int traverseephemeron(global_State *g, Table *h, int inv)
Definition: lgc.c:474
static void checkpointer(GCObject **p, GCObject *o)
Definition: lgc.c:989
static int iscleared(global_State *g, const GCObject *o)
Definition: lgc.c:185
lu_mem GCestimate
Definition: lstate.h:224
#define setdeadkey(node)
Definition: lobject.h:753
stringtable strt
Definition: lstate.h:226
void luaF_unlinkupval(UpVal *uv)
Definition: lfunc.c:215
static lu_mem traversetable(global_State *g, Table *h)
Definition: lgc.c:536
#define markobject(g, t)
Definition: lgc.c:99
lu_byte currentwhite
Definition: lstate.h:230
#define isempty(v)
Definition: lobject.h:195
static GCObject ** sweeptolive(lua_State *L, GCObject **p)
Definition: lgc.c:843
#define notm(tm)
Definition: ltm.h:61
GCObject * firstold1
Definition: lstate.h:254
struct Proto ** p
Definition: lobject.h:546
#define obj2gco(v)
Definition: lstate.h:347
#define gcvalue(o)
Definition: lobject.h:283
#define gnode(t, i)
Definition: ltable.h:13
unsigned long lu_mem
Definition: llimits.h:30
lu_byte genmajormul
Definition: lstate.h:234
static GCObject ** sweepgen(lua_State *L, global_State *g, GCObject **p, GCObject *limit, GCObject **pfirstold1)
Definition: lgc.c:1088
static lu_mem singlestep(lua_State *L)
Definition: lgc.c:1576
#define G_TOUCHED1
Definition: lgc.h:111
void luaC_step(lua_State *L)
Definition: lgc.c:1666
UValue uv[1]
Definition: lobject.h:445
unsigned short nuvalue
Definition: lobject.h:441
void luaC_fix(lua_State *L, GCObject *o)
Definition: lgc.c:243
#define gco2u(o)
Definition: lstate.h:332
#define keyiscollectable(n)
Definition: lobject.h:741
static void setminordebt(global_State *g)
Definition: lgc.c:1348
#define isold(o)
Definition: lgc.h:118
static void traversestrongtable(global_State *g, Table *h)
Definition: lgc.c:517
TString * name
Definition: lobject.h:494
#define setgcovalue(L, obj, x)
Definition: lobject.h:287
#define changeage(o, f, t)
Definition: lgc.h:120
void luaC_runtilstate(lua_State *L, int statesmask)
Definition: lgc.c:1631
GCObject * grayagain
Definition: lstate.h:244
#define l_setbit(x, b)
Definition: lgc.h:65
void luaS_remove(lua_State *L, TString *ts)
Definition: lstring.c:164
lu_byte gcemergency
Definition: lstate.h:236
static void clearbykeys(global_State *g, GCObject *l)
Definition: lgc.c:717
Definition: lobject.h:141
#define markobjectN(g, t)
Definition: lgc.c:105
lu_byte gcstate
Definition: lstate.h:231
void luaD_callnoyield(lua_State *L, StkId func, int nResults)
Definition: ldo.c:565
#define GCSpropagate
Definition: lgc.h:31
int sizep
Definition: lobject.h:539
#define G_OLD0
Definition: lgc.h:108
TValue uv
Definition: lobject.h:430
GCObject ** sweepgc
Definition: lstate.h:241
TString * source
Definition: lobject.h:551
static void genstep(lua_State *L, global_State *g)
Definition: lgc.c:1414
LUAI_FUNC void luaC_changemode(lua_State *L, int newmode)
Definition: lgc.c:1323
static void traverseweakvalue(global_State *g, Table *h)
Definition: lgc.c:440
#define isdeadm(ow, m)
Definition: lgc.h:95
static void freeobj(lua_State *L, GCObject *o)
Definition: lgc.c:764
#define UNUSED(x)
Definition: llimits.h:118
#define gnodelast(h)
Definition: lgc.c:122
#define LUA_VTABLE
Definition: lobject.h:655
#define PAUSEADJ
Definition: lgc.c:60
#define linkgclist(o, p)
Definition: lgc.c:146
GCObject * allgc
Definition: lstate.h:240
void luaD_shrinkstack(lua_State *L)
Definition: ldo.c:262
#define log2maxs(t)
Definition: llimits.h:60
#define nw2black(x)
Definition: lgc.h:99
#define setnilvalue(obj)
Definition: lobject.h:178
#define GCSpause
Definition: lgc.h:39
#define luaC_white(g)
Definition: lgc.h:102
Definition: lobject.h:606
static int traversethread(global_State *g, lua_State *th)
Definition: lgc.c:621
static GCObject ** sweeplist(lua_State *L, GCObject **p, int countin, int *countout)
Definition: lgc.c:816
#define gval(n)
Definition: ltable.h:14
int dummy
Definition: lstrlib.c:1347
size_t len
Definition: lobject.h:442
static void youngcollection(lua_State *L, global_State *g)
Definition: lgc.c:1224
void luaE_setdebt(global_State *g, l_mem debt)
Definition: lstate.c:89
#define FINALIZEDBIT
Definition: lgc.h:78
LUAI_FUNC void luaC_runtilstate(lua_State *L, int statesmask)
Definition: lgc.c:1631
#define GCSWEEPMAX
Definition: lgc.c:35
long l_mem
Definition: llimits.h:31
#define upisopen(up)
Definition: lfunc.h:32
GCObject * gclist
Definition: lobject.h:444
LUAI_FUNC void luaC_barrier_(lua_State *L, GCObject *o, GCObject *v)
Definition: lgc.c:208
StkId stack_last
Definition: lstate.h:281
lu_byte gcrunning
Definition: lstate.h:235
Definition: lobject.h:624
#define getage(o)
Definition: lgc.h:116
#define cast_void(i)
Definition: llimits.h:125
#define sizeLclosure(n)
Definition: lfunc.h:17
@ TM_GC
Definition: ltm.h:21
#define G(L)
Definition: lstate.h:298
static void correctgraylists(global_State *g)
Definition: lgc.c:1178
#define sizelstring(l)
Definition: lstring.h:26
#define LUA_VLNGSTR
Definition: lobject.h:339
static void clearkey(Node *n)
Definition: lgc.c:171
#define LUA_VSHRSTR
Definition: lobject.h:338
Definition: lobject.h:364
static void clearbyvalues(global_State *g, GCObject *l, GCObject *f)
Definition: lgc.c:736
#define gco2t(o)
Definition: lstate.h:337
LUAI_FUNC void luaC_freeallobjects(lua_State *L)
Definition: lgc.c:1503
LUAI_FUNC GCObject * luaC_newobj(lua_State *L, int tt, size_t sz)
Definition: lgc.c:258
GCObject * finobj
Definition: lstate.h:242
int sizek
Definition: lobject.h:536
unsigned char lu_byte
Definition: llimits.h:36
static void linkgclist_(GCObject *o, GCObject **pnext, GCObject **list)
Definition: lgc.c:148
#define set2black(x)
Definition: lgc.c:79
size_t lnglen
Definition: lobject.h:370
#define GCSatomic
Definition: lgc.h:33
#define G_TOUCHED2
Definition: lgc.h:112
#define G_OLD
Definition: lgc.h:110
TValue upvalue[1]
Definition: lobject.h:627
Definition: lobject.h:714
Definition: lobject.h:439
#define isgray(x)
Definition: lgc.h:89
UpVal * openupval
Definition: lstate.h:283
LUAI_FUNC void luaC_fix(lua_State *L, GCObject *o)
Definition: lgc.c:243
#define gfasttm(g, et, e)
Definition: ltm.h:64
l_mem GCdebt
Definition: lstate.h:223
#define gco2lcl(o)
Definition: lstate.h:333
void luaC_barrier_(lua_State *L, GCObject *o, GCObject *v)
Definition: lgc.c:208
LUAI_FUNC unsigned int luaH_realasize(const Table *t)
Definition: ltable.c:222
static GCObject ** findlast(GCObject **p)
Definition: lgc.c:952
struct Table * metatable
Definition: lobject.h:722
lu_byte genminormul
Definition: lstate.h:233
static GCObject * udata2finalize(global_State *g)
Definition: lgc.c:878
GCObject * finobjold1
Definition: lstate.h:256
GCObject * gclist
Definition: lobject.h:723
lu_byte gckind
Definition: lstate.h:232
#define allocsizenode(t)
Definition: ltable.h:31
#define GCFINMAX
Definition: lgc.c:40
struct Proto * p
Definition: lobject.h:633
static GCObject ** getgclist(GCObject *o)
Definition: lgc.c:125
struct lua_State * twups
Definition: lstate.h:285
#define luaM_newobject(L, tag, s)
Definition: lmem.h:64
#define gco2upv(o)
Definition: lstate.h:340
static void checkSizes(lua_State *L, global_State *g)
Definition: lgc.c:863
#define gettotalbytes(g)
Definition: lstate.h:351
TValue * v
Definition: lobject.h:609
TValue * array
Definition: lobject.h:719
#define keepinvariant(g)
Definition: lgc.h:54
TValue * k
Definition: lobject.h:544
#define keyisnil(node)
Definition: lobject.h:733
#define sizenode(t)
Definition: lobject.h:768
#define setempty(v)
Definition: lobject.h:203
unsigned int alimit
Definition: lobject.h:718
static void dothecall(lua_State *L, void *ud)
Definition: lgc.c:893
#define LUA_VPROTO
Definition: lobject.h:487
Definition: lobject.h:631
#define gco2p(o)
Definition: lstate.h:338
GCObject * reallyold
Definition: lstate.h:253
static void markold(global_State *g, GCObject *from, GCObject *to)
Definition: lgc.c:1194
#define testbit(x, b)
Definition: lgc.h:67
static void setpause(global_State *g)
Definition: lgc.c:1457
#define MAX_LMEM
Definition: llimits.h:50
#define GCSswpfinobj
Definition: lgc.h:35
#define markkey(g, n)
Definition: lgc.c:97
int sizeupvalues
Definition: lobject.h:535
static lu_mem propagateall(global_State *g)
Definition: lgc.c:668
void luaC_freeallobjects(lua_State *L)
Definition: lgc.c:1503
struct lua_State * twups
Definition: lstate.h:258
static void finishgencycle(lua_State *L, global_State *g)
Definition: lgc.c:1210
struct Table * mt[LUA_NUMTAGS]
Definition: lstate.h:263
#define setage(o, a)
Definition: lgc.h:117
#define G_OLD1
Definition: lgc.h:109
#define otherwhite(g)
Definition: lgc.h:94
CallInfo * ci
Definition: lstate.h:280
StkId stack
Definition: lstate.h:282
#define isblack(x)
Definition: lgc.h:88
static GCObject ** correctgraylist(GCObject **p)
Definition: lgc.c:1145
#define resetbit(x, b)
Definition: lgc.h:66
#define sizeudata(nuv, nb)
Definition: lobject.h:476
static void correctpointers(global_State *g, GCObject *o)
Definition: lgc.c:999
#define gco2th(o)
Definition: lstate.h:339
#define isdead(g, v)
Definition: lgc.h:96
lu_byte gcstepmul
Definition: lstate.h:238
Definition: lobject.h:530
#define set2gray(x)
Definition: lgc.c:75
#define GCSenteratomic
Definition: lgc.h:32
GCObject * finobjrold
Definition: lstate.h:257
static int sweepstep(lua_State *L, global_State *g, int nextstate, GCObject **nextlist)
Definition: lgc.c:1559
lu_byte gcpause
Definition: lstate.h:237
int luaD_pcall(lua_State *L, Pfunc func, void *u, ptrdiff_t old_top, ptrdiff_t ef)
Definition: ldo.c:777
static lu_mem atomic(lua_State *L)
Definition: lgc.c:1516
#define luaM_freemem(L, b, s)
Definition: lmem.h:55
#define markvalue(g, o)
Definition: lgc.c:94
static void atomic2gen(lua_State *L, global_State *g)
Definition: lgc.c:1265
static lu_mem fullgen(lua_State *L, global_State *g)
Definition: lgc.c:1338
static void callallpendingfinalizers(lua_State *L)
Definition: lgc.c:942
const TValue * luaT_gettmbyobj(lua_State *L, const TValue *o, TMS event)
Definition: ltm.c:71
static int runafewfinalizers(lua_State *L, int n)
Definition: lgc.c:930
#define gcvalueN(o)
Definition: lgc.c:91
#define setobj2s(L, o1, o2)
Definition: lobject.h:129
struct UpVal::@3::@4 open
static void convergeephemerons(global_State *g)
Definition: lgc.c:683
int nuse
Definition: lstate.h:152
#define gco2ccl(o)
Definition: lstate.h:334
lu_byte gcstepsize
Definition: lstate.h:239
LUAI_FUNC void luaC_checkfinalizer(lua_State *L, GCObject *o, Table *mt)
Definition: lgc.c:1011
#define G_NEW
Definition: lgc.h:106
#define CIST_FIN
Definition: lstate.h:199
void luaS_clearcache(global_State *g)
Definition: lstring.c:110
#define GCSswptobefnz
Definition: lgc.h:36
int size
Definition: lstate.h:153
static int traverseCclosure(global_State *g, CClosure *cl)
Definition: lgc.c:587
#define luaM_free(L, b)
Definition: lmem.h:56
struct lua_State * mainthread
Definition: lstate.h:260
static lu_mem markbeingfnz(global_State *g)
Definition: lgc.c:339
Definition: lobject.h:676
#define issweepphase(g)
Definition: lgc.h:42
lu_byte shrlen
Definition: lobject.h:367
StkId top
Definition: lstate.h:278
struct Table * metatable
Definition: lobject.h:443
GCObject * fixedgc
Definition: lstate.h:249
#define LUA_VLCL
Definition: lobject.h:568
GCObject * tobefnz
Definition: lstate.h:248
static void separatetobefnz(global_State *g, int all)
Definition: lgc.c:966
Definition: lobject.h:270
static int traverseproto(global_State *g, Proto *f)
Definition: lgc.c:572
#define GCSswpend
Definition: lgc.h:37
void luaC_fullgc(lua_State *L, int isemergency)
Definition: lgc.c:1703
#define LUA_VUPVAL
Definition: lobject.h:564
#define KGC_INC
Definition: lstate.h:146
#define KGC_GEN
Definition: lstate.h:147
#define isintwups(L)
Definition: lfunc.h:22
GCObject * allweak
Definition: lstate.h:247
#define stacksize(th)
Definition: lstate.h:142
lu_byte allowhook
Definition: lstate.h:276
#define next(ls)
Definition: llex.c:32
LocVar * locvars
Definition: lobject.h:550
#define sizeCclosure(n)
Definition: lfunc.h:14
unsigned short callstatus
Definition: lstate.h:185
GCObject * finobjsur
Definition: lstate.h:255
#define getgcparam(p)
Definition: lgc.h:135
static void whitelist(global_State *g, GCObject *p)
Definition: lgc.c:1129
#define LUA_VCCL
Definition: lobject.h:570
#define svalue(o)
Definition: lobject.h:385
#define LUA_VUSERDATA
Definition: lobject.h:409
void luaC_changemode(lua_State *L, int newmode)
Definition: lgc.c:1323
#define valiswhite(x)
Definition: lgc.c:83
int sizelocvars
Definition: lobject.h:540
void luaE_freethread(lua_State *L, lua_State *L1)
Definition: lstate.c:314
void luaS_resize(lua_State *L, int nsize)
Definition: lstring.c:85
LUAI_FUNC void luaC_barrierback_(lua_State *L, GCObject *o)
Definition: lgc.c:230
static void freeupval(lua_State *L, UpVal *uv)
Definition: lgc.c:757
static lu_mem propagatemark(global_State *g)
Definition: lgc.c:652
LUAI_FUNC void luaC_step(lua_State *L)
Definition: lgc.c:1666
GCObject * gray
Definition: lstate.h:243
GCObject * ephemeron
Definition: lstate.h:246
#define gckeyN(n)
Definition: lobject.h:744
UpVal * upvals[1]
Definition: lobject.h:634
static void sweep2old(lua_State *L, GCObject **p)
Definition: lgc.c:1052
@ TM_MODE
Definition: ltm.h:22
GCObject * weak
Definition: lstate.h:245
GCObject * survival
Definition: lstate.h:251
#define savestack(L, p)
Definition: ldo.h:35
static void genlink(global_State *g, GCObject *o)
Definition: lgc.c:424
static void entersweep(lua_State *L)
Definition: lgc.c:1478
static void incstep(lua_State *L, global_State *g)
Definition: lgc.c:1645
#define makewhite(g, x)
Definition: lgc.c:71
LUAI_FUNC void luaC_fullgc(lua_State *L, int isemergency)
Definition: lgc.c:1703
#define ttisstring(o)
Definition: lobject.h:341