LuaThreadExtensions.cs 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. using Lua.Internal;
  2. namespace Lua;
  3. public static class LuaThreadExtensions
  4. {
  5. public static async ValueTask<LuaValue[]> ResumeAsync(this LuaThread thread, LuaState state, CancellationToken cancellationToken = default)
  6. {
  7. using var buffer = new PooledArray<LuaValue>(1024);
  8. var frameBase = thread.Stack.Count;
  9. thread.Stack.Push(thread);
  10. var resultCount = await thread.ResumeAsync(new()
  11. {
  12. State = state,
  13. Thread = state.CurrentThread,
  14. ArgumentCount = 1,
  15. FrameBase = frameBase,
  16. }, buffer.AsMemory(), cancellationToken);
  17. return buffer.AsSpan()[0..resultCount].ToArray();
  18. }
  19. public static async ValueTask<LuaValue[]> ResumeAsync(this LuaThread thread, LuaState state, LuaValue[] arguments, CancellationToken cancellationToken = default)
  20. {
  21. using var buffer = new PooledArray<LuaValue>(1024);
  22. var frameBase = thread.Stack.Count;
  23. thread.Stack.Push(thread);
  24. for (int i = 0; i < arguments.Length; i++)
  25. {
  26. thread.Stack.Push(arguments[i]);
  27. }
  28. var resultCount = await thread.ResumeAsync(new()
  29. {
  30. State = state,
  31. Thread = state.CurrentThread,
  32. ArgumentCount = 1 + arguments.Length,
  33. FrameBase = frameBase,
  34. }, buffer.AsMemory(), cancellationToken);
  35. return buffer.AsSpan()[0..resultCount].ToArray();
  36. }
  37. }