Add lua_State* argument to destructors registered with lua_newuserdatadtor

This commit is contained in:
Petri Häkkinen 2022-05-28 11:47:26 +03:00
parent 61766a692c
commit 949581db23
4 changed files with 8 additions and 8 deletions

View file

@ -177,7 +177,7 @@ LUA_API int lua_pushthread(lua_State* L);
LUA_API void lua_pushlightuserdata(lua_State* L, void* p);
LUA_API void* lua_newuserdatatagged(lua_State* L, size_t sz, int tag);
LUA_API void* lua_newuserdatadtor(lua_State* L, size_t sz, void (*dtor)(void*));
LUA_API void* lua_newuserdatadtor(lua_State* L, size_t sz, void (*dtor)(lua_State*, void*));
/*
** get functions (Lua -> stack)

View file

@ -1213,7 +1213,7 @@ void* lua_newuserdatatagged(lua_State* L, size_t sz, int tag)
return u->data;
}
void* lua_newuserdatadtor(lua_State* L, size_t sz, void (*dtor)(void*))
void* lua_newuserdatadtor(lua_State* L, size_t sz, void (*dtor)(lua_State*, void*))
{
luaC_checkGC(L);
luaC_checkthreadsleep(L);

View file

@ -31,10 +31,10 @@ void luaU_freeudata(lua_State* L, Udata* u, lua_Page* page)
}
else if (u->tag == UTAG_IDTOR)
{
void (*dtor)(void*) = nullptr;
void (*dtor)(lua_State*, void*) = nullptr;
memcpy(&dtor, &u->data + u->len - sizeof(dtor), sizeof(dtor));
if (dtor)
dtor(u->data);
dtor(L, u->data);
}

View file

@ -668,10 +668,10 @@ TEST_CASE("Reference")
lua_State* L = globalState.get();
// note, we push two userdata objects but only pin one of them (the first one)
lua_newuserdatadtor(L, 0, [](void*) {
lua_newuserdatadtor(L, 0, [](lua_State*, void*) {
dtorhits++;
});
lua_newuserdatadtor(L, 0, [](void*) {
lua_newuserdatadtor(L, 0, [](lua_State*, void*) {
dtorhits++;
});
@ -1092,11 +1092,11 @@ TEST_CASE("UserdataApi")
CHECK(lua_userdatatag(L, -1) == 42);
// user data with inline dtor
void* ud3 = lua_newuserdatadtor(L, 4, [](void* data) {
void* ud3 = lua_newuserdatadtor(L, 4, [](lua_State*, void* data) {
dtorhits += *(int*)data;
});
void* ud4 = lua_newuserdatadtor(L, 1, [](void* data) {
void* ud4 = lua_newuserdatadtor(L, 1, [](lua_State*, void* data) {
dtorhits += *(char*)data;
});