From 4b6756049b20f2a77c09238bc6036d11f5fc358a Mon Sep 17 00:00:00 2001 From: Bart van Strien Date: Sat, 30 Mar 2024 13:16:21 +0100 Subject: [PATCH] Add support for lua 5.4 to-be-closed variables Automatically call object:release() when an object is used as a to-be-closed variable. Since both release and __gc already handle multiple calls, this just works. Theoretically extra actions could be added to some objects, like File calling File:close(), but it already does that in its destructor, so that should be unnecessary. --- src/common/runtime.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/common/runtime.cpp b/src/common/runtime.cpp index d9f2570dc..0e2fe2045 100644 --- a/src/common/runtime.cpp +++ b/src/common/runtime.cpp @@ -547,6 +547,10 @@ int luax_register_type(lua_State *L, love::Type *type, ...) lua_pushcfunction(L, w__release); lua_setfield(L, -2, "release"); + // Add __close for lua 5.4 (just calls release) + lua_pushcfunction(L, w__release); + lua_setfield(L, -2, "__close"); + va_list fs; va_start(fs, type); for (const luaL_Reg *f = va_arg(fs, const luaL_Reg *); f; f = va_arg(fs, const luaL_Reg *))