示例#1
0
        public static int print(IntPtr L)
        {
            int    n = LuaAPI.lua_gettop(L);
            string s = String.Empty;

            LuaAPI.lua_getglobal(L, "tostring");
            for (int i = 1; i <= n; i++)
            {
                LuaAPI.lua_pushvalue(L, -1);  /* function to be called */
                LuaAPI.lua_pushvalue(L, i);   /* value to print */
                if (0 != LuaAPI.lua_pcall(L, 1, 1, 0))
                {
                    return(LuaAPI.lua_error(L));
                }
                s += LuaAPI.lua_tostring(L, -1);

                if (i != n)
                {
                    s += "\t";
                }

                LuaAPI.lua_pop(L, 1);
            }
            UnityEngine.Debug.Log("LUA: " + s);
            return(0);
        }
示例#2
0
        public static ObjectTranslator FromState(IntPtr luaState)
        {
            LuaAPI.lua_getglobal(luaState, "_translator");
            int pos = (int)LuaAPI.lua_tonumber(luaState, -1);

            LuaAPI.lua_pop(luaState, 1);
            return(list[pos]);
        }
示例#3
0
 public static int traceback(IntPtr L)
 {
     LuaAPI.lua_getglobal(L, "debug");
     LuaAPI.lua_getfield(L, -1, "traceback");
     LuaAPI.lua_pushvalue(L, 1);
     LuaAPI.lua_pushnumber(L, 2);
     LuaAPI.lua_pcall(L, 2, 1, 0);
     return(1);
 }
示例#4
0
        public void AddLoader(LuaCSFunction loader, int index)
        {
            LuaAPI.lua_getglobal(L, "package");
            LuaAPI.lua_getfield(L, -1, "searchers");
            LuaAPI.lua_remove(L, -2); //remv table package
            int len = LuaAPI.lua_rawlen(L, -1);

            for (int i = len + 1; i > index; i--)
            {
                LuaAPI.ulua_rawgeti(L, -1, i - 1);
                LuaAPI.ulua_rawseti(L, -2, i);
            }
            LuaAPI.lua_pushstdcallcfunction(L, loader);
            LuaAPI.ulua_rawseti(L, -2, index);
        }
示例#5
0
        public object this[string fullPath]
        {
            get
            {
                object   returnValue = null;
                int      oldTop      = LuaAPI.lua_gettop(L);
                string[] path        = fullPath.Split(new char[] { '.' });
                LuaAPI.lua_getglobal(L, path[0]);
                returnValue = translator.getObject(L, -1);
                if (path.Length > 1)
                {
                    string[] remainingPath = new string[path.Length - 1];
                    Array.Copy(path, 1, remainingPath, 0, path.Length - 1);
                    returnValue = getObject(remainingPath);
                }
                LuaAPI.lua_settop(L, oldTop);
                return(returnValue);
            }
            set
            {
                int      oldTop = LuaAPI.lua_gettop(L);
                string[] path   = fullPath.Split(new char[] { '.' });
                if (path.Length == 1)
                {
                    translator.push(L, value);
                    LuaAPI.lua_setglobal(L, fullPath);
                }
                else
                {
                    LuaAPI.lua_getglobal(L, path[0]);
                    LuaTypes type = LuaAPI.lua_type(L, -1);
                    if (type == LuaTypes.LUA_TNIL)
                    {
                        Debugger.LogError("Table {0} not exists", path[0]);
                        LuaAPI.lua_settop(L, oldTop);
                        return;
                    }

                    string[] remainingPath = new string[path.Length - 1];
                    Array.Copy(path, 1, remainingPath, 0, path.Length - 1);
                    setObject(remainingPath, value);
                }
                LuaAPI.lua_settop(L, oldTop);
            }
        }
示例#6
0
 private void setGlobalFunctions(IntPtr luaState)
 {
     LuaAPI.lua_pushstdcallcfunction(luaState, metaFunctions.indexFunction);
     LuaAPI.lua_setglobal(luaState, "get_object_member");
     LuaAPI.lua_getglobal(luaState, "luanet");
     LuaAPI.lua_pushstring(luaState, "import_type");
     LuaAPI.lua_pushstdcallcfunction(luaState, importTypeFunction);
     LuaAPI.lua_settable(luaState, -3);
     LuaAPI.lua_pushstring(luaState, "load_assembly");
     LuaAPI.lua_pushstdcallcfunction(luaState, loadAssemblyFunction);
     LuaAPI.lua_settable(luaState, -3);
     LuaAPI.lua_pushstring(luaState, "make_object");
     LuaAPI.lua_pushstdcallcfunction(luaState, unregisterTableFunction);
     LuaAPI.lua_settable(luaState, -3);
     LuaAPI.lua_pushstring(luaState, "ctype");
     LuaAPI.lua_pushstdcallcfunction(luaState, ctypeFunction);
     LuaAPI.lua_settable(luaState, -3);
     LuaAPI.lua_pushstring(luaState, "enum");
     LuaAPI.lua_pushstdcallcfunction(luaState, enumFromIntFunction);
     LuaAPI.lua_settable(luaState, -3);
 }
示例#7
0
        public LuaState()
        {
            L = LuaAPI.luaL_newstate();
            LuaAPI.luaL_openlibs(L);

            LuaAPI.lua_newtable(L);
            LuaAPI.lua_pushstring(L, "getmetatable");
            LuaAPI.lua_getglobal(L, "getmetatable");
            LuaAPI.lua_settable(L, -3);
            LuaAPI.lua_pushstring(L, "rawget");
            LuaAPI.lua_getglobal(L, "rawget");
            LuaAPI.lua_settable(L, -3);
            LuaAPI.lua_pushstring(L, "rawset");
            LuaAPI.lua_getglobal(L, "rawset");
            LuaAPI.lua_settable(L, -3);
            LuaAPI.lua_setglobal(L, "luanet");

            LuaAPI.lua_getglobal(L, "luanet");
            translator = new ObjectTranslator(this, L);
            translator.PushTranslator(L);

            LuaAPI.lua_atpanic(L, LuaStatic.panic);

            LuaAPI.lua_pushstdcallcfunction(L, LuaStatic.print);
            LuaAPI.lua_setglobal(L, "print");
            LuaAPI.lua_pushstdcallcfunction(L, LuaStatic.loadfile);
            LuaAPI.lua_setglobal(L, "loadfile");
            LuaAPI.lua_pushstdcallcfunction(L, LuaStatic.dofile);
            LuaAPI.lua_setglobal(L, "dofile");
            LuaAPI.lua_pushstdcallcfunction(L, LuaStatic.importWrap);
            LuaAPI.lua_setglobal(L, "import");

            AddLoader(LuaStatic.loader, 2);
            AddLoader(LuaStatic.LoadBuiltinLib, 3);

            errorFuncRef = LuaAPI.get_error_func_ref(L);
            LuaAPI.lua_settop(L, 0); //clear stack
        }