public string GetFunctionInfo() { LuaDLL.lua_getglobal(L, "FormatFunctionInfo"); //-> f, FormatFunctionInfo if (LuaDLL.lua_isfunction(L, -1)) { LuaDLL.lua_pushvalue(L, -2); //-> f, FormatFunctionInfo, f if (PCall(1, 1)) //-> f, callbackInfo { string callbackInfo = LuaDLL.lua_tostring(L, -1); LuaDLL.lua_pop(L, 2); return(callbackInfo); } else //-> f, err { string errInfo = LuaDLL.lua_tostring(L, -1); LuaDLL.lua_pop(L, 2); return(errInfo); } } else //-> f, xx { LuaDLL.lua_pop(L, 2); return("failed to call FormatFunctionInfo"); } }
public static int msgHandler(IntPtr L) { if (!LuaDLL.lua_isstring(L, 1)) { return(1); } LuaDLL.wlua_getglobal(L, "debug"); //msg,debug if (!LuaDLL.lua_istable(L, -1)) { LuaDLL.lua_pop(L, 1); return(1); } LuaDLL.wlua_getfield(L, -1, "traceback"); //msg,debug,traceback if (!LuaDLL.lua_isfunction(L, -1)) { LuaDLL.lua_pop(L, 2); return(1); } LuaStateCache cache = LuaStateCacheMan.GetLuaStateCache(L); LuaDLL.lua_pushvalue(L, 1); //msg,debug,traceback,msg LuaDLL.lua_pushinteger(L, 2 + (cache.isException() ? 2 : 0)); //msg,debug,traceback,msg,level LuaDLL.lua_pcall(L, 2, 1, 0); //msg,debug,tracebackstring cache.clearException(); return(1); }
public static int errorFunc_traceback(IntPtr L) { if (!LuaDLL.lua_isstring(L, 1)) /* 'message' not a string? */ { return(1); /* keep it intact */ } LuaDLL.lua_getfield(L, LuaIndexes.LUA_GLOBALSINDEX, "debug"); if (LuaDLL.lua_istable(L, -1)) { LuaDLL.lua_pop(L, 1); return(1); } LuaDLL.lua_getfield(L, -1, "traceback"); if (LuaDLL.lua_isfunction(L, -1)) { LuaDLL.lua_pop(L, 2); return(1); } LuaDLL.lua_pushvalue(L, 1); /* pass error message */ LuaDLL.lua_pushinteger(L, 2); /* skip this function and traceback */ LuaDLL.lua_call(L, 2, 1); /* call debug.traceback */ return(1); }