/* * Implementation of free_object. Clears the metatable and the * base field, freeing the created object for garbage-collection */ private int unregisterTable(LuaCore.lua_State luaState) { try { if (LuaLib.lua_getmetatable(luaState, 1) != 0) { LuaLib.lua_pushstring(luaState, "__index"); LuaLib.lua_gettable(luaState, -2); object obj = getRawNetObject(luaState, -1); if (obj.IsNull()) { throwError(luaState, "unregister_table: arg is not valid table"); } var luaTableField = obj.GetType().GetField("__luaInterface_luaTable"); if (luaTableField.IsNull()) { throwError(luaState, "unregister_table: arg is not valid table"); } luaTableField.SetValue(obj, null); LuaLib.lua_pushnil(luaState); LuaLib.lua_setmetatable(luaState, 1); LuaLib.lua_pushstring(luaState, "base"); LuaLib.lua_pushnil(luaState); LuaLib.lua_settable(luaState, 1); } else { throwError(luaState, "unregister_table: arg is not valid table"); } } catch (Exception e) { throwError(luaState, e.Message); } return(0); }