summaryrefslogtreecommitdiff
path: root/clap.zig
diff options
context:
space:
mode:
Diffstat (limited to 'clap.zig')
-rw-r--r--clap.zig14
1 files changed, 10 insertions, 4 deletions
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;
4const heap = std.heap; 4const heap = std.heap;
5const io = std.io; 5const io = std.io;
6const mem = std.mem; 6const mem = std.mem;
7const process = std.process;
7const testing = std.testing; 8const testing = std.testing;
8 9
9pub const args = @import("clap/args.zig"); 10pub const args = @import("clap/args.zig");
@@ -347,16 +348,21 @@ pub fn parse(
347 comptime params: []const Param(Id), 348 comptime params: []const Param(Id),
348 opt: ParseOptions, 349 opt: ParseOptions,
349) !Args(Id, params) { 350) !Args(Id, params) {
350 var iter = try args.OsIterator.init(opt.allocator); 351 var arena = heap.ArenaAllocator.init(opt.allocator);
352 errdefer arena.deinit();
353
354 var iter = try process.ArgIterator.initWithAllocator(arena.allocator());
355 const exe_arg = iter.next();
356
351 const clap = try parseEx(Id, params, &iter, .{ 357 const clap = try parseEx(Id, params, &iter, .{
352 // Let's reuse the arena from the `OSIterator` since we already have it. 358 // Let's reuse the arena from the `OSIterator` since we already have it.
353 .allocator = iter.arena.allocator(), 359 .allocator = arena.allocator(),
354 .diagnostic = opt.diagnostic, 360 .diagnostic = opt.diagnostic,
355 }); 361 });
356 362
357 return Args(Id, params){ 363 return Args(Id, params){
358 .exe_arg = iter.exe_arg, 364 .exe_arg = exe_arg,
359 .arena = iter.arena, 365 .arena = arena,
360 .clap = clap, 366 .clap = clap,
361 }; 367 };
362} 368}