Merge pull request #55 from Timidger/bugfix/setting_metatable_nil

Fixes error when setting metatable to nil
This commit is contained in:
kyren 2017-11-08 00:32:38 -05:00 committed by GitHub
commit cf013a6a43
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 11 additions and 1 deletions

View File

@ -629,6 +629,16 @@ fn test_recursive_callback_panic() {
.unwrap();
}
#[test]
fn test_set_metatable_nil() {
let lua = Lua::new();
lua.exec::<()>(
r#"
a = {}
setmetatable(a, nil)
"#, None).unwrap();
}
// TODO: Need to use compiletest-rs or similar to make sure these don't compile.
/*
#[test]

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
// method when it exists upon calling setmetatable, and ignores it if it is set later.
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 {
ffi::lua_pushvalue(state, ffi::lua_upvalueindex(1));
ffi::lua_insert(state, 1);