Пример #1
0
        /// <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);
        }
Пример #2
0
        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);
        }
Пример #3
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);
        }