コード例 #1
0
        static public IEnumerator buildEnumerator(LuaThread lt)
        {
            LuaDLL.lua_getref(lt.L, lt.Ref);
            IntPtr t = LuaDLL.lua_tothread(lt.L, -1);

            LuaDLL.lua_resume(t, 0);
            for (; lt.Ref != 0;)
            {
                int r = LuaDLL.lua_status(t);
                if (r == 0)
                {
                    if (LuaDLL.lua_gettop(t) == 0)
                    {
                        yield break;
                    }
                    else
                    {
                        yield return(null);
                    }
                }
                else if (r == (int)SLua.LuaThreadStatus.LUA_YIELD)
                {
                    yield return(null);
                }
                else
                {
                    Logger.LogError("buildEnumerator loop exit: " + r);
                    yield break;
                }
            }
        }
コード例 #2
0
        static public bool checkType(IntPtr l, int p, out LuaThread lt)
        {
            LuaDLL.luaL_checktype(l, p, LuaTypes.LUA_TTHREAD);
            LuaDLL.lua_pushvalue(l, p);
            int fref = LuaDLL.luaL_ref(l, LuaIndexes.LUA_REGISTRYINDEX);

            lt = new LuaThread(l, fref);
            return(true);
        }
コード例 #3
0
        public static bool CheckType(IntPtr ptr, int p, out LuaThread lt)
        {
            if (LuaNativeMethods.lua_isnil(ptr, p))
            {
                lt = null;
                return(true);
            }

            LuaNativeMethods.luaL_checktype(ptr, p, LuaTypes.TYPE_THREAD);
            LuaNativeMethods.lua_pushvalue(ptr, p);
            int fref = LuaNativeMethods.luaL_ref(ptr, LuaIndexes.LUARegistryIndex);

            lt = new LuaThread(ptr, fref);
            return(true);
        }