static int traceback(LuaState L) { if (Lua.LuaIsString(L, 1) == 0) /* 'message' not a string? */ { return(1); /* keep it intact */ } Lua.LuaGetField(L, Lua.LUA_GLOBALSINDEX, "debug"); if (!Lua.LuaIsTable(L, -1)) { Lua.LuaPop(L, 1); return(1); } Lua.LuaGetField(L, -1, "traceback"); if (!Lua.LuaIsFunction(L, -1)) { Lua.LuaPop(L, 2); return(1); } Lua.LuaPushValue(L, 1); /* pass error message */ Lua.LuaPushInteger(L, 2); /* skip this function and traceback */ Lua.LuaCall(L, 2, 1); /* call debug.traceback */ return(1); }