lua_rawseti() private method

private lua_rawseti ( IntPtr luaState, int tableIndex, System.Int64 index ) : void
luaState System.IntPtr
tableIndex int
index System.Int64
return void
 private void pushNewObject(IntPtr luaState, object o, int index, string metatable)
 {
     LuaDLL.lua_getref(luaState, this.weakTableRef);
     LuaDLL.luanet_newudata(luaState, index);
     if (metatable == "luaNet_metatable")
     {
         Type type = o.GetType();
         ObjectTranslator.PushMetaTable(luaState, o.GetType());
         if (LuaDLL.lua_isnil(luaState, -1))
         {
             string assemblyQualifiedName = type.AssemblyQualifiedName;
             Debugger.Log("<color=green>Create not wrap ulua type:" + assemblyQualifiedName + "</color>", new object[0]);
             LuaDLL.lua_settop(luaState, -2);
             LuaDLL.luaL_newmetatable(luaState, assemblyQualifiedName);
             LuaDLL.lua_pushstring(luaState, "cache");
             LuaDLL.lua_newtable(luaState);
             LuaDLL.lua_rawset(luaState, -3);
             LuaDLL.lua_pushlightuserdata(luaState, LuaDLL.luanet_gettag());
             LuaDLL.lua_pushnumber(luaState, 1.0);
             LuaDLL.lua_rawset(luaState, -3);
             LuaDLL.lua_pushstring(luaState, "__index");
             LuaDLL.lua_pushstring(luaState, "luaNet_indexfunction");
             LuaDLL.lua_rawget(luaState, LuaIndexes.LUA_REGISTRYINDEX);
             LuaDLL.lua_rawset(luaState, -3);
             LuaDLL.lua_pushstring(luaState, "__gc");
             LuaDLL.lua_pushstdcallcfunction(luaState, this.metaFunctions.gcFunction, 0);
             LuaDLL.lua_rawset(luaState, -3);
             LuaDLL.lua_pushstring(luaState, "__tostring");
             LuaDLL.lua_pushstdcallcfunction(luaState, this.metaFunctions.toStringFunction, 0);
             LuaDLL.lua_rawset(luaState, -3);
             LuaDLL.lua_pushstring(luaState, "__newindex");
             LuaDLL.lua_pushstdcallcfunction(luaState, this.metaFunctions.newindexFunction, 0);
             LuaDLL.lua_rawset(luaState, -3);
         }
     }
     else
     {
         LuaDLL.luaL_getmetatable(luaState, metatable);
     }
     LuaDLL.lua_setmetatable(luaState, -2);
     LuaDLL.lua_pushvalue(luaState, -1);
     LuaDLL.lua_rawseti(luaState, -3, index);
     LuaDLL.lua_remove(luaState, -2);
 }
示例#2
0
        public static void SetSearcher(IntPtr L, LuaCSFunction loader)
        {
            int top = LuaDLL.lua_gettop(L);

            LuaDLL.wlua_getglobal(L, "package");               //package
            LuaDLL.wlua_getfield(L, -1, "searchers");          //package,searchers
            LuaDLL.wlua_getglobal(L, "cswrapfunc");            //package,searchers,wrap
            LuaDLL.wLua_wrapfunction(L, -1, loader);           //package,searchers,wrap,loader
            LuaDLL.wlua_pushcclosure(L, LuaFuncs.searcher, 1); //package,searchers,wrap,searcher
            LuaDLL.lua_remove(L, -2);                          //package,searchers,searcher

            int searchersIndex = LuaDLL.lua_gettop(L) - 1;

            for (int e = (int)LuaDLL.lua_rawlen(L, searchersIndex) + 1; e > 1; e--)
            {
                LuaDLL.lua_rawgeti(L, searchersIndex, e - 1);    //package,searchers,searcher,value
                LuaDLL.lua_rawseti(L, searchersIndex, e);        //package,searchers,searcher
            }
            LuaDLL.lua_rawseti(L, searchersIndex, 1);            //package,searchers
            LuaDLL.lua_settop(L, top);
        }
示例#3
0
        /*
         * Pushes a new object into the Lua stack with the provided
         * metatable
         */
        private void pushNewObject(IntPtr luaState, object o, int index, string metatable)
        {
            CreateMetaTable(luaState, o, metatable);

            // Stores the object index in the Lua list and pushes the index into the Lua stack
            //if (!o.GetType().IsValueType)
            //{
            LuaDLL.luaL_getmetatable(luaState, "luaNet_objects");
            LuaDLL.luanet_newudata(luaState, index);
            LuaDLL.lua_pushvalue(luaState, -3);
            LuaDLL.lua_remove(luaState, -4);
            LuaDLL.lua_setmetatable(luaState, -2);
            LuaDLL.lua_pushvalue(luaState, -1);
            LuaDLL.lua_rawseti(luaState, -3, index);
            LuaDLL.lua_remove(luaState, -2);
            //}
            //else
            //{
            //    LuaDLL.luanet_newudata(luaState, index);
            //    LuaDLL.lua_pushvalue(luaState, -2);
            //    LuaDLL.lua_remove(luaState, -3);
            //    LuaDLL.lua_setmetatable(luaState, -2);
            //}
        }
示例#4
0
        public LuaState()
        {
            // Create State
            L = LuaDLL.luaL_newstate();

            // Create LuaInterface library
            LuaDLL.luaL_openlibs(L);
            LuaDLL.lua_pushstring(L, "LUAINTERFACE LOADED");
            LuaDLL.lua_pushboolean(L, true);
            LuaDLL.lua_settable(L, (int)LuaIndexes.LUA_REGISTRYINDEX);
            LuaDLL.lua_newtable(L);

            LuaDLL.lua_setglobal(L, "luanet");
            LuaDLL.lua_pushvalue(L, (int)LuaIndexes.LUA_GLOBALSINDEX);  //鍘嬪叆浜哶G琛?
            LuaDLL.lua_getglobal(L, "luanet");
            LuaDLL.lua_pushstring(L, "getmetatable");
            LuaDLL.lua_getglobal(L, "getmetatable");
            LuaDLL.lua_settable(L, -3);
            LuaDLL.lua_pushstring(L, "rawget");
            LuaDLL.lua_getglobal(L, "rawget");
            LuaDLL.lua_settable(L, -3);
            LuaDLL.lua_pushstring(L, "rawset");
            LuaDLL.lua_getglobal(L, "rawset");
            LuaDLL.lua_settable(L, -3);

            // Set luanet as global for object translator
            LuaDLL.lua_replace(L, (int)LuaIndexes.LUA_GLOBALSINDEX); //鐢╨uanet鏇挎崲_G琛?
            translator = new ObjectTranslator(this, L);
            LuaDLL.lua_replace(L, (int)LuaIndexes.LUA_GLOBALSINDEX); //鎭㈠_G琛?

            translator.PushTranslator(L);

            // We need to keep this in a managed reference so the delegate doesn't get garbage collected
            panicCallback = new LuaCSFunction(LuaStatic.panic);
            LuaDLL.lua_atpanic(L, panicCallback);

            printFunction = new LuaCSFunction(LuaStatic.print);
            LuaDLL.lua_pushstdcallcfunction(L, printFunction);
            LuaDLL.lua_setfield(L, LuaIndexes.LUA_GLOBALSINDEX, "lprint");

            warnFunction = new LuaCSFunction(LuaStatic.warn);
            LuaDLL.lua_pushstdcallcfunction(L, warnFunction);
            LuaDLL.lua_setfield(L, LuaIndexes.LUA_GLOBALSINDEX, "lwarn");

            breakFunction = new LuaCSFunction(LuaStatic.breakFunc);
            LuaDLL.lua_pushstdcallcfunction(L, breakFunction);
            LuaDLL.lua_setfield(L, LuaIndexes.LUA_GLOBALSINDEX, "breakpoint");

            loadfileFunction = new LuaCSFunction(LuaStatic.loadfile);
            LuaDLL.lua_pushstdcallcfunction(L, loadfileFunction);
            LuaDLL.lua_setfield(L, LuaIndexes.LUA_GLOBALSINDEX, "loadfile");

            dofileFunction = new LuaCSFunction(LuaStatic.dofile);
            LuaDLL.lua_pushstdcallcfunction(L, dofileFunction);
            LuaDLL.lua_setfield(L, LuaIndexes.LUA_GLOBALSINDEX, "dofile");

            pcallFunction = new LuaCSFunction(LuaStatic.pcall);
            LuaDLL.lua_pushstdcallcfunction(L, pcallFunction);
            LuaDLL.lua_setfield(L, LuaIndexes.LUA_GLOBALSINDEX, "pcall");

            LuaDLL.lua_pushstdcallcfunction(L, LuaStatic.errorFunc_traceback);
            errorFuncRef = LuaDLL.luaL_ref(L, LuaIndexes.LUA_REGISTRYINDEX);

            // Insert our loader FIRST
            loaderFunction = new LuaCSFunction(LuaStatic.loader);
            LuaDLL.lua_pushstdcallcfunction(L, loaderFunction);
            int loaderFunc = LuaDLL.lua_gettop(L);

            LuaDLL.lua_getfield(L, LuaIndexes.LUA_GLOBALSINDEX, "package");
            LuaDLL.lua_getfield(L, -1, "loaders");
            int loaderTable = LuaDLL.lua_gettop(L);

            // Shift table elements right
            for (int e = LuaDLL.luaL_getn(L, loaderTable) + 1; e > 1; e--)
            {
                LuaDLL.lua_rawgeti(L, loaderTable, e - 1);
                LuaDLL.lua_rawseti(L, loaderTable, e);
            }
            LuaDLL.lua_pushvalue(L, loaderFunc);
            LuaDLL.lua_rawseti(L, loaderTable, 1);
            LuaDLL.lua_settop(L, 0);

            DoString(LuaStatic.init_luanet);
            tracebackFunction = new LuaCSFunction(LuaStatic.traceback);
        }
示例#5
0
 public void LuaRawSetI(int tableIndex, int index)
 {
     LuaDLL.lua_rawseti(L, tableIndex, index);
 }
示例#6
0
        public LuaState()
        {
            // Create State
            L = LuaDLL.luaL_newstate();

            // Create LuaInterface library
            LuaDLL.luaL_openlibs(L);
            LuaDLL.lua_pushstring(L, "LUAINTERFACE LOADED");
            LuaDLL.lua_pushboolean(L, true);
            LuaDLL.lua_settable(L, (int)LuaIndexes.LUA_REGISTRYINDEX);
            LuaDLL.lua_newtable(L);
            LuaDLL.lua_setglobal(L, "luanet");
            LuaDLL.lua_pushvalue(L, (int)LuaIndexes.LUA_GLOBALSINDEX);
            LuaDLL.lua_getglobal(L, "luanet");
            LuaDLL.lua_pushstring(L, "getmetatable");
            LuaDLL.lua_getglobal(L, "getmetatable");
            LuaDLL.lua_settable(L, -3);

            // Set luanet as global for object translator
            LuaDLL.lua_replace(L, (int)LuaIndexes.LUA_GLOBALSINDEX);
            translator = new ObjectTranslator(this, L);
            LuaDLL.lua_replace(L, (int)LuaIndexes.LUA_GLOBALSINDEX);

            GCHandle handle  = GCHandle.Alloc(translator, GCHandleType.Pinned);
            IntPtr   thisptr = GCHandle.ToIntPtr(handle);

            LuaDLL.lua_pushlightuserdata(L, thisptr);
            LuaDLL.lua_setglobal(L, "_translator");

            // We need to keep this in a managed reference so the delegate doesn't get garbage collected
            panicCallback = new LuaCSFunction(LuaStatic.panic);
            LuaDLL.lua_atpanic(L, panicCallback);

            printFunction = new LuaCSFunction(LuaStatic.print);
            LuaDLL.lua_pushstdcallcfunction(L, printFunction);
            LuaDLL.lua_setfield(L, LuaIndexes.LUA_GLOBALSINDEX, "print");

            loadfileFunction = new LuaCSFunction(LuaStatic.loadfile);
            LuaDLL.lua_pushstdcallcfunction(L, loadfileFunction);
            LuaDLL.lua_setfield(L, LuaIndexes.LUA_GLOBALSINDEX, "loadfile");

            dofileFunction = new LuaCSFunction(LuaStatic.dofile);
            LuaDLL.lua_pushstdcallcfunction(L, dofileFunction);
            LuaDLL.lua_setfield(L, LuaIndexes.LUA_GLOBALSINDEX, "dofile");

            // Insert our loader FIRST
            loaderFunction = new LuaCSFunction(LuaStatic.loader);
            LuaDLL.lua_pushstdcallcfunction(L, loaderFunction);
            int loaderFunc = LuaDLL.lua_gettop(L);

            LuaDLL.lua_getfield(L, LuaIndexes.LUA_GLOBALSINDEX, "package");
            LuaDLL.lua_getfield(L, -1, "loaders");
            int loaderTable = LuaDLL.lua_gettop(L);

            // Shift table elements right
            for (int e = LuaDLL.luaL_getn(L, loaderTable) + 1; e > 1; e--)
            {
                LuaDLL.lua_rawgeti(L, loaderTable, e - 1);
                LuaDLL.lua_rawseti(L, loaderTable, e);
            }
            LuaDLL.lua_pushvalue(L, loaderFunc);
            LuaDLL.lua_rawseti(L, loaderTable, 1);
            LuaDLL.lua_settop(L, 0);

            DoString(LuaStatic.init_luanet);
            tracebackFunction = new LuaCSFunction(LuaStatic.traceback);
        }