From 002aaf8dcf8aac37d6ddd0ae910609c6a3a7f622 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petri=20H=C3=A4kkinen?= Date: Thu, 2 Nov 2023 11:05:44 +0200 Subject: [PATCH] Add lua_lightuserdatatag --- VM/include/lua.h | 1 + VM/src/lapi.cpp | 8 ++++++++ tests/Conformance.test.cpp | 2 ++ 3 files changed, 11 insertions(+) diff --git a/VM/include/lua.h b/VM/include/lua.h index 35c1cd02..d3b3b83c 100644 --- a/VM/include/lua.h +++ b/VM/include/lua.h @@ -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_touserdatatagged(lua_State* L, int idx, int tag); 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 void* lua_tobuffer(lua_State* L, int idx, size_t* len); LUA_API const void* lua_topointer(lua_State* L, int idx); diff --git a/VM/src/lapi.cpp b/VM/src/lapi.cpp index 7fc0db50..cd595774 100644 --- a/VM/src/lapi.cpp +++ b/VM/src/lapi.cpp @@ -536,6 +536,14 @@ int lua_userdatatag(lua_State* L, int idx) 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) { StkId o = index2addr(L, idx); diff --git a/tests/Conformance.test.cpp b/tests/Conformance.test.cpp index 429ab1d9..e47ccc8e 100644 --- a/tests/Conformance.test.cpp +++ b/tests/Conformance.test.cpp @@ -1675,10 +1675,12 @@ TEST_CASE("LightuserdataApi") void* value = (void*)0x12345678; lua_pushlightuserdata(L, value); + CHECK(lua_lightuserdatatag(L, -1) == 0); CHECK(lua_tolightuserdatatagged(L, -1, 0) == value); CHECK(lua_tolightuserdatatagged(L, -1, 1) == nullptr); lua_pushlightuserdatatagged(L, value, 1); + CHECK(lua_lightuserdatatag(L, -1) == 1); CHECK(lua_tolightuserdatatagged(L, -1, 0) == nullptr); CHECK(lua_tolightuserdatatagged(L, -1, 1) == value);