namespace Lua.Standard.IO; public sealed class FileLinesFunction : LuaFunction { public override string Name => "lines"; public static readonly FileLinesFunction Instance = new(); protected override ValueTask InvokeAsyncCore(LuaFunctionExecutionContext context, Memory buffer, CancellationToken cancellationToken) { var arg0 = context.ReadArgument(0); var arg1 = context.ArgumentCount >= 2 ? context.Arguments[1] : "*l"; buffer.Span[0] = new Iterator(arg0, arg1); return new(1); } class Iterator(FileHandle file, LuaValue format) : LuaFunction { readonly LuaValue[] formats = [format]; protected override ValueTask InvokeAsyncCore(LuaFunctionExecutionContext context, Memory buffer, CancellationToken cancellationToken) { var resultCount = IOHelper.Read(context.State, file, Name, 0, formats, buffer, true); return new(resultCount); } } }