RawLenFunction.cs 815 B

12345678910111213141516171819202122232425262728
  1. namespace Lua.Standard.Basic;
  2. public sealed class RawLenFunction : LuaFunction
  3. {
  4. public override string Name => "rawlen";
  5. public static readonly RawLenFunction Instance = new();
  6. protected override ValueTask<int> InvokeAsyncCore(LuaFunctionExecutionContext context, Memory<LuaValue> buffer, CancellationToken cancellationToken)
  7. {
  8. var arg0 = context.GetArgument(0);
  9. if (arg0.TryRead<LuaTable>(out var table))
  10. {
  11. buffer.Span[0] = table.ArrayLength;
  12. }
  13. else if (arg0.TryRead<string>(out var str))
  14. {
  15. buffer.Span[0] = str.Length;
  16. }
  17. else
  18. {
  19. LuaRuntimeException.BadArgument(context.State.GetTraceback(), 2, Name, [LuaValueType.String, LuaValueType.Table]);
  20. }
  21. return new(1);
  22. }
  23. }