issue #196 We need the old upval barrier for the LLVM backend plus few moe barriers from 5.3 update

lua54-gc
Dibyendu Majumdar 4 years ago
parent ca6dd43389
commit 6e45d0ea05

@ -184,6 +184,7 @@ LUAI_FUNC GCObject *luaC_newobj (lua_State *L, int tt, size_t sz);
LUAI_FUNC void luaC_barrier_ (lua_State *L, GCObject *o, GCObject *v);
LUAI_FUNC void luaC_barrierback_ (lua_State *L, GCObject *o);
LUAI_FUNC void luaC_upvalbarrier_(lua_State* L, GCObject* o);
LUAI_FUNC void luaC_upvalbarrier_compat(lua_State* L, UpVal* uv);
LUAI_FUNC void luaC_checkfinalizer (lua_State *L, GCObject *o, Table *mt);
LUAI_FUNC void luaC_upvdeccount (lua_State *L, UpVal *uv);
LUAI_FUNC void luaC_changemode (lua_State *L, int newmode);

@ -285,6 +285,17 @@ void luaC_upvalbarrier_(lua_State* L, GCObject* o) {
}
}
/* This is for compat with LLVM backend */
void luaC_upvalbarrier_compat(lua_State* L, UpVal* uv) {
global_State* g = G(L);
GCObject* o = gcvalue(uv->v);
lua_assert(!upisopen(uv)); /* ensured by macro luaC_upvalbarrier */
if (keepinvariant(g) && !isold(o)) {
markobject(g, o);
setage(o, G_OLD0);
}
}
/*
** barrier that moves collector backward, that is, mark the black object
** pointing to a white object as gray again.

@ -962,6 +962,7 @@ static void open_func (LexState *ls, FuncState *fs, BlockCnt *bl) {
fs->bl = NULL;
f = fs->f;
f->source = ls->source;
luaC_objbarrier(ls->L, f, f->source);
f->maxstacksize = 2; /* registers 0/1 are always valid */
enterblock(fs, bl, 0);
DEBUG_VARS(raviY_printf(fs, "open_func -> fs->firstlocal set to %d (ls->dyd->actvar.n), and fs->nactvar reset to 0\n", ls->dyd->actvar.n));
@ -2463,6 +2464,7 @@ static void mainfunc (LexState *ls, FuncState *fs) {
fs->f->is_vararg = 1; /* main function is always declared vararg */
init_exp(&v, VLOCAL, 0, RAVI_TANY, NULL); /* create and... - RAVI TODO var arg is unknown type */
newupvalue(fs, ls->envn, &v); /* ...set environment upvalue */
luaC_objbarrier(ls->L, fs->f, ls->envn);
luaX_next(ls); /* read first token */
statlist(ls); /* parse main body */
check(ls, TK_EOS);

@ -1142,7 +1142,7 @@ void RaviCodeGenerator::emit_extern_declarations(RaviFunctionDef *def) {
"luaV_objlen");
def->luaC_upvalbarrierF = def->raviF->addExternFunction(
def->types->luaC_upvalbarrierT,
reinterpret_cast<void *>(&luaC_upvalbarrier_), "luaC_upvalbarrier_");
reinterpret_cast<void *>(&luaC_upvalbarrier_compat), "luaC_upvalbarrier_");
def->raviV_op_concatF = def->raviF->addExternFunction(
def->types->raviV_op_concatT, reinterpret_cast<void *>(&raviV_op_concat),
"raviV_op_concat");

Loading…
Cancel
Save