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; } } }
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); }
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); }