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; }
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 }
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); }