Add lua_lightuserdatatag

This commit is contained in:
Petri Häkkinen 2023-11-02 11:05:44 +02:00
parent 661734412f
commit 002aaf8dcf
3 changed files with 11 additions and 0 deletions

View file

@ -163,6 +163,7 @@ LUA_API void* lua_tolightuserdatatagged(lua_State* L, int idx, int tag);
LUA_API void* lua_touserdata(lua_State* L, int idx); LUA_API void* lua_touserdata(lua_State* L, int idx);
LUA_API void* lua_touserdatatagged(lua_State* L, int idx, int tag); LUA_API void* lua_touserdatatagged(lua_State* L, int idx, int tag);
LUA_API int lua_userdatatag(lua_State* L, int idx); LUA_API int lua_userdatatag(lua_State* L, int idx);
LUA_API int lua_lightuserdatatag(lua_State* L, int idx);
LUA_API lua_State* lua_tothread(lua_State* L, int idx); LUA_API lua_State* lua_tothread(lua_State* L, int idx);
LUA_API void* lua_tobuffer(lua_State* L, int idx, size_t* len); LUA_API void* lua_tobuffer(lua_State* L, int idx, size_t* len);
LUA_API const void* lua_topointer(lua_State* L, int idx); LUA_API const void* lua_topointer(lua_State* L, int idx);

View file

@ -536,6 +536,14 @@ int lua_userdatatag(lua_State* L, int idx)
return -1; return -1;
} }
int lua_lightuserdatatag(lua_State* L, int idx)
{
StkId o = index2addr(L, idx);
if (ttislightuserdata(o))
return o->extra[0];
return -1;
}
lua_State* lua_tothread(lua_State* L, int idx) lua_State* lua_tothread(lua_State* L, int idx)
{ {
StkId o = index2addr(L, idx); StkId o = index2addr(L, idx);

View file

@ -1675,10 +1675,12 @@ TEST_CASE("LightuserdataApi")
void* value = (void*)0x12345678; void* value = (void*)0x12345678;
lua_pushlightuserdata(L, value); lua_pushlightuserdata(L, value);
CHECK(lua_lightuserdatatag(L, -1) == 0);
CHECK(lua_tolightuserdatatagged(L, -1, 0) == value); CHECK(lua_tolightuserdatatagged(L, -1, 0) == value);
CHECK(lua_tolightuserdatatagged(L, -1, 1) == nullptr); CHECK(lua_tolightuserdatatagged(L, -1, 1) == nullptr);
lua_pushlightuserdatatagged(L, value, 1); lua_pushlightuserdatatagged(L, value, 1);
CHECK(lua_lightuserdatatag(L, -1) == 1);
CHECK(lua_tolightuserdatatagged(L, -1, 0) == nullptr); CHECK(lua_tolightuserdatatagged(L, -1, 0) == nullptr);
CHECK(lua_tolightuserdatatagged(L, -1, 1) == value); CHECK(lua_tolightuserdatatagged(L, -1, 1) == value);