public void L_Traceback(ILuaState otherLua, string msg, int level) { LuaState oLua = otherLua as LuaState; LuaDebug ar = new LuaDebug(); int top = API.GetTop(); int numLevels = oLua.CountLevels(); int mark = (numLevels > LEVELS1 + LEVELS2) ? LEVELS1 : 0; if (msg != null) { API.PushString(string.Format("{0}\n", msg)); } API.PushString("stack traceback:"); while (otherLua.GetStack(level++, ar)) { if (level == mark) // too many levels? { API.PushString("\n\t..."); level = numLevels - LEVELS2; // and skip to last ones } else { oLua.GetInfo("Slnt", ar); API.PushString(string.Format("\n\t{0}:", ar.ShortSrc)); if (ar.CurrentLine > 0) { API.PushString(string.Format("{0}:", ar.CurrentLine)); } API.PushString(" in "); PushFuncName(ar); if (ar.IsTailCall) { API.PushString("\n\t(...tail calls...)"); } API.Concat(API.GetTop() - top); } } API.Concat(API.GetTop() - top); }