NextFunction.cs 757 B

12345678910111213141516171819202122232425
  1. namespace Lua.Standard.Basic;
  2. public sealed class NextFunction : LuaFunction
  3. {
  4. public override string Name => "next";
  5. public static readonly NextFunction Instance = new();
  6. protected override ValueTask<int> InvokeAsyncCore(LuaFunctionExecutionContext context, Memory<LuaValue> buffer, CancellationToken cancellationToken)
  7. {
  8. var arg0 = context.GetArgument<LuaTable>(0);
  9. var arg1 = context.HasArgument(1) ? context.Arguments[1] : LuaValue.Nil;
  10. if (arg0.TryGetNext(arg1, out var kv))
  11. {
  12. buffer.Span[0] = kv.Key;
  13. buffer.Span[1] = kv.Value;
  14. return new(2);
  15. }
  16. else
  17. {
  18. buffer.Span[0] = LuaValue.Nil;
  19. return new(1);
  20. }
  21. }
  22. }