mirror of
https://github.com/cloudwu/skynet.git
synced 2026-07-24 12:20:41 +00:00
@@ -80,9 +80,9 @@
|
|||||||
(x->marked = cast_byte((x->marked & ~WHITEBITS) | bitmask(BLACKBIT)))
|
(x->marked = cast_byte((x->marked & ~WHITEBITS) | bitmask(BLACKBIT)))
|
||||||
|
|
||||||
|
|
||||||
#define valiswhite(x) (iscollectable(x) && iswhite(gcvalue(x)))
|
#define valiswhite(x) (iscollectable(x) && ispurewhite(gcvalue(x)))
|
||||||
|
|
||||||
#define keyiswhite(n) (keyiscollectable(n) && iswhite(gckey(n)))
|
#define keyiswhite(n) (keyiscollectable(n) && ispurewhite(gckey(n)))
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -96,7 +96,7 @@
|
|||||||
|
|
||||||
#define markkey(g, n) { if keyiswhite(n) reallymarkobject(g,gckey(n)); }
|
#define markkey(g, n) { if keyiswhite(n) reallymarkobject(g,gckey(n)); }
|
||||||
|
|
||||||
#define markobject(g,t) { if (iswhite(t)) reallymarkobject(g, obj2gco(t)); }
|
#define markobject(g,t) { if (ispurewhite(t)) reallymarkobject(g, obj2gco(t)); }
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** mark an object that can be NULL (either because it is really optional,
|
** mark an object that can be NULL (either because it is really optional,
|
||||||
@@ -188,7 +188,7 @@ static int iscleared (global_State *g, const GCObject *o) {
|
|||||||
markobject(g, o); /* strings are 'values', so are never weak */
|
markobject(g, o); /* strings are 'values', so are never weak */
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
else return iswhite(o);
|
else return ispurewhite(o);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -289,8 +289,6 @@ GCObject *luaC_newobj (lua_State *L, int tt, size_t sz) {
|
|||||||
** (only closures can), and a userdata's metatable must be a table.
|
** (only closures can), and a userdata's metatable must be a table.
|
||||||
*/
|
*/
|
||||||
static void reallymarkobject (global_State *g, GCObject *o) {
|
static void reallymarkobject (global_State *g, GCObject *o) {
|
||||||
if (isshared(o))
|
|
||||||
return;
|
|
||||||
switch (o->tt) {
|
switch (o->tt) {
|
||||||
case LUA_VSHRSTR:
|
case LUA_VSHRSTR:
|
||||||
case LUA_VLNGSTR: {
|
case LUA_VLNGSTR: {
|
||||||
|
|||||||
@@ -120,6 +120,7 @@
|
|||||||
|
|
||||||
#define isshared(x) (getage(x) == G_SHARED)
|
#define isshared(x) (getage(x) == G_SHARED)
|
||||||
#define makeshared(x) setage(x, G_SHARED)
|
#define makeshared(x) setage(x, G_SHARED)
|
||||||
|
#define ispurewhite(x) (iswhite(x) && !isshared(x))
|
||||||
|
|
||||||
#define changeage(o,f,t) \
|
#define changeage(o,f,t) \
|
||||||
check_exp(getage(o) == (f), (o)->marked ^= ((f)^(t)))
|
check_exp(getage(o) == (f), (o)->marked ^= ((f)^(t)))
|
||||||
@@ -167,15 +168,15 @@
|
|||||||
|
|
||||||
|
|
||||||
#define luaC_barrier(L,p,v) ( \
|
#define luaC_barrier(L,p,v) ( \
|
||||||
(iscollectable(v) && isblack(p) && iswhite(gcvalue(v)) && !isshared(gcvalue(v))) ? \
|
(iscollectable(v) && isblack(p) && ispurewhite(gcvalue(v))) ? \
|
||||||
luaC_barrier_(L,obj2gco(p),gcvalue(v)) : cast_void(0))
|
luaC_barrier_(L,obj2gco(p),gcvalue(v)) : cast_void(0))
|
||||||
|
|
||||||
#define luaC_barrierback(L,p,v) ( \
|
#define luaC_barrierback(L,p,v) ( \
|
||||||
(iscollectable(v) && isblack(p) && iswhite(gcvalue(v)) && !isshared(gcvalue(v))) ? \
|
(iscollectable(v) && isblack(p) && ispurewhite(gcvalue(v))) ? \
|
||||||
luaC_barrierback_(L,p) : cast_void(0))
|
luaC_barrierback_(L,p) : cast_void(0))
|
||||||
|
|
||||||
#define luaC_objbarrier(L,p,o) ( \
|
#define luaC_objbarrier(L,p,o) ( \
|
||||||
(isblack(p) && iswhite(o) && !isshared(o)) ? \
|
(isblack(p) && ispurewhite(o)) ? \
|
||||||
luaC_barrier_(L,obj2gco(p),obj2gco(o)) : cast_void(0))
|
luaC_barrier_(L,obj2gco(p),obj2gco(o)) : cast_void(0))
|
||||||
|
|
||||||
LUAI_FUNC void luaC_fix (lua_State *L, GCObject *o);
|
LUAI_FUNC void luaC_fix (lua_State *L, GCObject *o);
|
||||||
|
|||||||
Reference in New Issue
Block a user