Пример #1
0
        static int PrintWarning(LuaState luaState)
        {
            // For each argument we'll 'tostring' it
            int n = LuaLib.LuaGetTop(luaState);
            var sb = new StringBuilder("Lua:");

            LuaLib.LuaGetGlobal(luaState, "tostring");

            for( int i = 1; i <= n; i++ )
            {
                LuaLib.LuaPushValue(luaState, -1);  /* function to be called */
                LuaLib.LuaPushValue(luaState, i);   /* value to print */
                LuaLib.LuaPCall(luaState, 1, 1, 0);

                var s = LuaLib.LuaToString(luaState, -1);
                sb.Append(s);

                if(i > 1)
                {
                    sb.Append("\t");
                }

                LuaLib.LuaPop(luaState, 1);  /* pop result */
            }
            UnityEngine.Debug.LogWarning(sb.ToString());
            return 0;
        }
Пример #2
0
        internal int DoTraceback(LuaState state)
        {
            // if err is not a string, just pass it on (the stack is local to the function)
            // I spent a solid hour of debugging non stop only to fix the issue with this one line
            // (the issue was that nlua would throw exception objects and this thing would inappropriately
            // stringify them btw, if you're interested)
            if (!LuaLib.LuaIsString(state, -1))
            {
                return(LuaLib.LuaGetTop(state));
            }

            var error = LuaLib.LuaToString(state, -1);

            LuaLib.LuaPop(state, 1);

            LuaLib.LuaNewTable(state); // t

            LuaLib.LuaPushString(state, "__etgmod_error");
            LuaLib.LuaPushBoolean(state, true);
            LuaLib.LuaSetTable(state, -3);

            LuaLib.LuaPushString(state, "msg");          // k
            LuaLib.LuaPushString(state, error);          // v
            LuaLib.LuaSetTable(state, -3);               // t[k] = v

            LuaLib.LuaPushString(state, "traceback");    // k
            LuaLib.LuaLTraceback(state, state, null, 0); // v
            LuaLib.LuaSetTable(state, -3);               // t[k] = v

            return(1);                                   // t is left
        }
Пример #3
0
        public static void SetReadFile(Lua lua)
        {
            if (ReadFileFunction == null)
                ReadFileFunction = new LuaNativeFunction(ReadFile);

            LuaLib.LuaGetGlobal(lua.LuaState, "io");
            LuaLib.LuaPushString(lua.LuaState, "readfile");
            LuaLib.LuaPushStdCallCFunction(lua.LuaState, ReadFileFunction);
            LuaLib.LuaSetTable(lua.LuaState, -3);
            LuaLib.LuaPop(lua.LuaState, 1);
        }