Only get gc on setmetatable if metatable isn't nil

This commit is contained in:
Timidger 2017-11-07 20:13:30 -08:00
parent 33eff0e132
commit 8ac27877e4
1 changed files with 1 additions and 1 deletions

View File

@ -512,7 +512,7 @@ pub unsafe extern "C" fn safe_setmetatable(state: *mut ffi::lua_State) -> c_int
// Wrapping the __gc method in setmetatable ONLY works because Lua 5.3 only honors the __gc // Wrapping the __gc method in setmetatable ONLY works because Lua 5.3 only honors the __gc
// method when it exists upon calling setmetatable, and ignores it if it is set later. // method when it exists upon calling setmetatable, and ignores it if it is set later.
push_string(state, "__gc"); push_string(state, "__gc");
if ffi::lua_rawget(state, -2) == ffi::LUA_TFUNCTION { if ffi::lua_istable(state, -2) == 1 && ffi::lua_rawget(state, -2) == ffi::LUA_TFUNCTION {
unsafe extern "C" fn safe_gc(state: *mut ffi::lua_State) -> c_int { unsafe extern "C" fn safe_gc(state: *mut ffi::lua_State) -> c_int {
ffi::lua_pushvalue(state, ffi::lua_upvalueindex(1)); ffi::lua_pushvalue(state, ffi::lua_upvalueindex(1));
ffi::lua_insert(state, 1); ffi::lua_insert(state, 1);