public static void GetTypeTable(IntPtr ptr, string t) { NewTypeTable(ptr, t); // for static LuaNativeMethods.lua_newtable(ptr); // for instance LuaNativeMethods.lua_newtable(ptr); }
public ObjectCache(IntPtr ptr) { LuaNativeMethods.lua_newtable(ptr); LuaNativeMethods.lua_newtable(ptr); LuaNativeMethods.lua_pushstring(ptr, "v"); LuaNativeMethods.lua_setfield(ptr, -2, "__mode"); LuaNativeMethods.lua_setmetatable(ptr, -2); cacheRef = LuaNativeMethods.luaL_ref(ptr, LuaIndexes.LUARegistryIndex); }
public LuaTable(LuaState state) : base(state, 0) { LuaNativeMethods.lua_newtable(VariablePointer); valueref = LuaNativeMethods.luaL_ref(VariablePointer, LuaIndexes.LUARegistryIndex); }
public static void Init(IntPtr ptr) { string newindexfun = @" local getmetatable=getmetatable local rawget=rawget local error=error local type=type local function newindex(ud,k,v) local t=getmetatable(ud) repeat local h=rawget(t,k) if h then if h[2] then h[2](ud,v) return else error('property '..k..' is read only') end end t=rawget(t,'__parent') until t==nil error('can not find '..k) end return newindex "; string indexfun = @" local type=type local error=error local rawget=rawget local getmetatable=getmetatable local function index(ud,k) local t=getmetatable(ud) repeat local fun=rawget(t,k) local tp=type(fun) if tp=='function' then return fun elseif tp=='table' then local f=fun[1] if f then return f(ud) else error('property '..k..' isthis.Write only') end end t = rawget(t,'__parent') until t==nil error('Can not find '..k) end return index "; LuaState state = LuaState.Get(ptr); newIndexFunction = (LuaFunction)state.DoString(newindexfun); indexFunction = (LuaFunction)state.DoString(indexfun); // object method LuaNativeMethods.lua_createtable(ptr, 0, 4); AddMember(ptr, ToString); AddMember(ptr, GetHashCode); AddMember(ptr, Equals); AddMember(ptr, GetType); LuaNativeMethods.lua_setfield(ptr, LuaIndexes.LUARegistryIndex, "__luabaseobject"); LuaArray.Init(ptr); LuaVarObject.Init(ptr); LuaNativeMethods.lua_newtable(ptr); LuaNativeMethods.lua_setglobal(ptr, DelgateTable); }