public void PushCSObject(object o) { if (o == null) { LuaLib.lua_pushnil(L); return; } int refId; if (!_objectUserdataRefIds.TryGetValue(o, out refId)) { LuaBindMetatable metatable = Bindings.GetMetatable(o.GetType(), LuaBindMetatableType.Instance); int objectUserdataValue = _newObjectUserdataValue++; LuaLib.wutlua_newuserdata(L, objectUserdataValue); // |ud metatable.Push(); // |ud|mt LuaLib.lua_setmetatable(L, -2); // |ud // ud.metatable = mt refId = LuaLib.luaL_ref(L, LuaIndices.LUA_REGISTRYINDEX); // | _objects[objectUserdataValue] = o; _objectUserdataRefIds[o] = refId; } LuaLib.lua_rawgeti(L, LuaIndices.LUA_REGISTRYINDEX, refId); // |ud }
public LuaTable(LuaState luaState, int index) : base(luaState) { if (!LuaLib.lua_isnil(luaState.L, index)) { LuaLib.lua_pushvalue(luaState.L, index); // |...|t|...|t _RefId = LuaLib.luaL_ref(luaState.L, LuaIndices.LUA_REGISTRYINDEX); // |...|t|...| // Registry[reference] = t } }
public LuaTable(LuaState luaState) : base(luaState) { LuaLib.lua_newtable(luaState.L); // |...|t _RefId = LuaLib.luaL_ref(luaState.L, LuaIndices.LUA_REGISTRYINDEX); // |...| // Registry[reference] = t }
public LuaFunction(LuaState luaState, int index) : base(luaState) { LuaLib.lua_pushvalue(luaState.L, index); // |...|f|...|f _RefId = LuaLib.luaL_ref(luaState.L, LuaIndices.LUA_REGISTRYINDEX); // |...|f|...| // Registry[reference] = f }