mirror of
https://github.com/luau-lang/luau.git
synced 2025-05-04 10:33:46 +01:00
Add lightuserdatatag macro
This commit is contained in:
parent
23b516e158
commit
09840f8f32
6 changed files with 10 additions and 8 deletions
|
@ -508,7 +508,7 @@ void* lua_tolightuserdata(lua_State* L, int idx)
|
||||||
void* lua_tolightuserdatatagged(lua_State* L, int idx, int tag)
|
void* lua_tolightuserdatatagged(lua_State* L, int idx, int tag)
|
||||||
{
|
{
|
||||||
StkId o = index2addr(L, idx);
|
StkId o = index2addr(L, idx);
|
||||||
return (!ttislightuserdata(o) || o->extra[0] != tag) ? NULL : pvalue(o);
|
return (!ttislightuserdata(o) || lightuserdatatag(o) != tag) ? NULL : pvalue(o);
|
||||||
}
|
}
|
||||||
|
|
||||||
void* lua_touserdata(lua_State* L, int idx)
|
void* lua_touserdata(lua_State* L, int idx)
|
||||||
|
@ -540,7 +540,7 @@ int lua_lightuserdatatag(lua_State* L, int idx)
|
||||||
{
|
{
|
||||||
StkId o = index2addr(L, idx);
|
StkId o = index2addr(L, idx);
|
||||||
if (ttislightuserdata(o))
|
if (ttislightuserdata(o))
|
||||||
return o->extra[0];
|
return lightuserdatatag(o);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -48,7 +48,7 @@ int luaO_rawequalObj(const TValue* t1, const TValue* t2)
|
||||||
case LUA_TBOOLEAN:
|
case LUA_TBOOLEAN:
|
||||||
return bvalue(t1) == bvalue(t2); // boolean true must be 1 !!
|
return bvalue(t1) == bvalue(t2); // boolean true must be 1 !!
|
||||||
case LUA_TLIGHTUSERDATA:
|
case LUA_TLIGHTUSERDATA:
|
||||||
return pvalue(t1) == pvalue(t2) && t1->extra[0] == t2->extra[0];
|
return pvalue(t1) == pvalue(t2) && lightuserdatatag(t1) == lightuserdatatag(t2);
|
||||||
default:
|
default:
|
||||||
LUAU_ASSERT(iscollectable(t1));
|
LUAU_ASSERT(iscollectable(t1));
|
||||||
return gcvalue(t1) == gcvalue(t2);
|
return gcvalue(t1) == gcvalue(t2);
|
||||||
|
@ -71,7 +71,7 @@ int luaO_rawequalKey(const TKey* t1, const TValue* t2)
|
||||||
case LUA_TBOOLEAN:
|
case LUA_TBOOLEAN:
|
||||||
return bvalue(t1) == bvalue(t2); // boolean true must be 1 !!
|
return bvalue(t1) == bvalue(t2); // boolean true must be 1 !!
|
||||||
case LUA_TLIGHTUSERDATA:
|
case LUA_TLIGHTUSERDATA:
|
||||||
return pvalue(t1) == pvalue(t2) && t1->extra[0] == t2->extra[0];
|
return pvalue(t1) == pvalue(t2) && lightuserdatatag(t1) == lightuserdatatag(t2);
|
||||||
default:
|
default:
|
||||||
LUAU_ASSERT(iscollectable(t1));
|
LUAU_ASSERT(iscollectable(t1));
|
||||||
return gcvalue(t1) == gcvalue(t2);
|
return gcvalue(t1) == gcvalue(t2);
|
||||||
|
|
|
@ -80,6 +80,8 @@ typedef struct lua_TValue
|
||||||
|
|
||||||
#define l_isfalse(o) (ttisnil(o) || (ttisboolean(o) && bvalue(o) == 0))
|
#define l_isfalse(o) (ttisnil(o) || (ttisboolean(o) && bvalue(o) == 0))
|
||||||
|
|
||||||
|
#define lightuserdatatag(o) check_exp(ttislightuserdata(o), (o)->extra[0])
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** for internal debug only
|
** for internal debug only
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -131,7 +131,7 @@ const TString* luaT_objtypenamestr(lua_State* L, const TValue* o)
|
||||||
}
|
}
|
||||||
else if (ttislightuserdata(o))
|
else if (ttislightuserdata(o))
|
||||||
{
|
{
|
||||||
const TString* name = L->global->lightuserdataname[o->extra[0]];
|
const TString* name = L->global->lightuserdataname[lightuserdatatag(o)];
|
||||||
|
|
||||||
if (name)
|
if (name)
|
||||||
return name;
|
return name;
|
||||||
|
|
|
@ -1112,7 +1112,7 @@ reentry:
|
||||||
VM_NEXT();
|
VM_NEXT();
|
||||||
|
|
||||||
case LUA_TLIGHTUSERDATA:
|
case LUA_TLIGHTUSERDATA:
|
||||||
pc += pvalue(ra) == pvalue(rb) && ra->extra[0] == rb->extra[0] ? LUAU_INSN_D(insn) : 1;
|
pc += (pvalue(ra) == pvalue(rb) && lightuserdatatag(ra) == lightuserdatatag(rb)) ? LUAU_INSN_D(insn) : 1;
|
||||||
LUAU_ASSERT(unsigned(pc - cl->l.p->code) < unsigned(cl->l.p->sizecode));
|
LUAU_ASSERT(unsigned(pc - cl->l.p->code) < unsigned(cl->l.p->sizecode));
|
||||||
VM_NEXT();
|
VM_NEXT();
|
||||||
|
|
||||||
|
@ -1227,7 +1227,7 @@ reentry:
|
||||||
VM_NEXT();
|
VM_NEXT();
|
||||||
|
|
||||||
case LUA_TLIGHTUSERDATA:
|
case LUA_TLIGHTUSERDATA:
|
||||||
pc += pvalue(ra) != pvalue(rb) || ra->extra[0] != rb->extra[0] ? LUAU_INSN_D(insn) : 1;
|
pc += (pvalue(ra) != pvalue(rb) || lightuserdatatag(ra) != lightuserdatatag(rb)) ? LUAU_INSN_D(insn) : 1;
|
||||||
LUAU_ASSERT(unsigned(pc - cl->l.p->code) < unsigned(cl->l.p->sizecode));
|
LUAU_ASSERT(unsigned(pc - cl->l.p->code) < unsigned(cl->l.p->sizecode));
|
||||||
VM_NEXT();
|
VM_NEXT();
|
||||||
|
|
||||||
|
|
|
@ -288,7 +288,7 @@ int luaV_equalval(lua_State* L, const TValue* t1, const TValue* t2)
|
||||||
case LUA_TBOOLEAN:
|
case LUA_TBOOLEAN:
|
||||||
return bvalue(t1) == bvalue(t2); // true must be 1 !!
|
return bvalue(t1) == bvalue(t2); // true must be 1 !!
|
||||||
case LUA_TLIGHTUSERDATA:
|
case LUA_TLIGHTUSERDATA:
|
||||||
return pvalue(t1) == pvalue(t2) && t1->extra[0] == t2->extra[0];
|
return pvalue(t1) == pvalue(t2) && lightuserdatatag(t1) == lightuserdatatag(t2);
|
||||||
case LUA_TUSERDATA:
|
case LUA_TUSERDATA:
|
||||||
{
|
{
|
||||||
tm = get_compTM(L, uvalue(t1)->metatable, uvalue(t2)->metatable, TM_EQ);
|
tm = get_compTM(L, uvalue(t1)->metatable, uvalue(t2)->metatable, TM_EQ);
|
||||||
|
|
Loading…
Add table
Reference in a new issue