From 7188a9fc85f6aa0f71a4cb7966f8b0a044f29e02 Mon Sep 17 00:00:00 2001 From: Jimmi Holst Christensen Date: Mon, 31 Jan 2022 17:11:15 +0100 Subject: Refactor the ArgIterator interface They now follow the interface provided by the standard library. This now means that we no longer needs `args.OsIterator` as that the one from `std` can now be used directly. Also remove `args.ShellIterator` as a simular iterator exists in `std` called `ArgIteratorGeneral`. --- clap.zig | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) (limited to 'clap.zig') diff --git a/clap.zig b/clap.zig index 7234283..39bbef2 100644 --- a/clap.zig +++ b/clap.zig @@ -4,6 +4,7 @@ const debug = std.debug; const heap = std.heap; const io = std.io; const mem = std.mem; +const process = std.process; const testing = std.testing; pub const args = @import("clap/args.zig"); @@ -347,16 +348,21 @@ pub fn parse( comptime params: []const Param(Id), opt: ParseOptions, ) !Args(Id, params) { - var iter = try args.OsIterator.init(opt.allocator); + var arena = heap.ArenaAllocator.init(opt.allocator); + errdefer arena.deinit(); + + var iter = try process.ArgIterator.initWithAllocator(arena.allocator()); + const exe_arg = iter.next(); + const clap = try parseEx(Id, params, &iter, .{ // Let's reuse the arena from the `OSIterator` since we already have it. - .allocator = iter.arena.allocator(), + .allocator = arena.allocator(), .diagnostic = opt.diagnostic, }); return Args(Id, params){ - .exe_arg = iter.exe_arg, - .arena = iter.arena, + .exe_arg = exe_arg, + .arena = arena, .clap = clap, }; } -- cgit v1.2.3