/// <summary> /// Push a debug.traceback reference onto the stack, for a pcall function to use as error handler. (Remember to increment any top-of-stack markers!) /// </summary> private int PushDebugTraceback(LuaState luaState, int argcount) { LuaLib.LuaGetGlobal(luaState, "debug"); LuaLib.LuaGetField(luaState, -1, "traceback"); LuaLib.LuaRemove(luaState, -2); int errindex = -argcount - 2; LuaLib.LuaInsert(luaState, errindex); return(errindex); }
public static void CheckStack(this Lua lua) { var luaState = lua.LuaState; var top = LuaLib.LuaGetTop(luaState); if (top == 0) return; LuaLib.LuaPushString(luaState, "Script stack leak!"); LuaLib.LuaInsert(luaState, 1); LuaLib.LuaPushNumber(luaState, top); LuaLib.LuaInsert(luaState, 1); LuaLib.LuaGetGlobal(luaState, "print"); LuaLib.LuaInsert(luaState, 1); LuaLib.LuaPCall(luaState, top + 2, 0, 0); LuaLib.LuaSetTop(luaState, 0); }
public object GetAsObject(LuaState luaState, int stackPos) { if (LuaLib.LuaType(luaState, stackPos) == LuaTypes.Table) { if (LuaLib.LuaLGetMetafield(luaState, stackPos, "__index")) { if (LuaLib.LuaLCheckMetatable(luaState, -1)) { LuaLib.LuaInsert(luaState, stackPos); LuaLib.LuaRemove(luaState, stackPos + 1); } else { LuaLib.LuaSetTop(luaState, -2); } } } object obj = translator.GetObject(luaState, stackPos); return(obj); }