From cf3a4e763831dd7e0845fef4f209f5c780eda375 Mon Sep 17 00:00:00 2001 From: Jimmi Holst Christensen Date: Wed, 13 Dec 2023 08:53:06 +0100 Subject: Remove the default allocator from `ParseOptions` fixes #111 --- README.md | 22 ++++++++++++++++++++-- clap.zig | 7 +------ example/help.zig | 7 ++++++- example/simple-ex.zig | 4 ++++ example/simple.zig | 4 ++++ example/usage.zig | 7 ++++++- 6 files changed, 41 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index f5018fc..f74c11f 100644 --- a/README.md +++ b/README.md @@ -37,6 +37,9 @@ const debug = std.debug; const io = std.io; pub fn main() !void { + var gpa = std.heap.GeneralPurposeAllocator(.{}){}; + defer _ = gpa.deinit(); + // First we specify what parameters our program can take. // We can use `parseParamsComptime` to parse a string into an array of `Param(Help)` const params = comptime clap.parseParamsComptime( @@ -53,6 +56,7 @@ pub fn main() !void { var diag = clap.Diagnostic{}; var res = clap.parse(clap.Help, ¶ms, clap.parsers.default, .{ .diagnostic = &diag, + .allocator = gpa.allocator(), }) catch |err| { // Report useful error and exit diag.report(io.getStdErr().writer(), err) catch {}; @@ -92,6 +96,9 @@ const io = std.io; const process = std.process; pub fn main() !void { + var gpa = std.heap.GeneralPurposeAllocator(.{}){}; + defer _ = gpa.deinit(); + // First we specify what parameters our program can take. // We can use `parseParamsComptime` to parse a string into an array of `Param(Help)` const params = comptime clap.parseParamsComptime( @@ -116,6 +123,7 @@ pub fn main() !void { var diag = clap.Diagnostic{}; var res = clap.parse(clap.Help, ¶ms, parsers, .{ .diagnostic = &diag, + .allocator = gpa.allocator(), }) catch |err| { diag.report(io.getStdErr().writer(), err) catch {}; return err; @@ -219,13 +227,18 @@ const clap = @import("clap"); const std = @import("std"); pub fn main() !void { + var gpa = std.heap.GeneralPurposeAllocator(.{}){}; + defer _ = gpa.deinit(); + const params = comptime clap.parseParamsComptime( \\-h, --help Display this help and exit. \\-v, --version Output version information and exit. \\ ); - var res = try clap.parse(clap.Help, ¶ms, clap.parsers.default, .{}); + var res = try clap.parse(clap.Help, ¶ms, clap.parsers.default, .{ + .allocator = gpa.allocator(), + }); defer res.deinit(); // `clap.help` is a function that can print a simple help message. It can print any `Param` @@ -257,6 +270,9 @@ const clap = @import("clap"); const std = @import("std"); pub fn main() !void { + var gpa = std.heap.GeneralPurposeAllocator(.{}){}; + defer _ = gpa.deinit(); + const params = comptime clap.parseParamsComptime( \\-h, --help Display this help and exit. \\-v, --version Output version information and exit. @@ -264,7 +280,9 @@ pub fn main() !void { \\ ); - var res = try clap.parse(clap.Help, ¶ms, clap.parsers.default, .{}); + var res = try clap.parse(clap.Help, ¶ms, clap.parsers.default, .{ + .allocator = gpa.allocator(), + }); defer res.deinit(); // `clap.usage` is a function that can print a simple help message. It can print any `Param` diff --git a/clap.zig b/clap.zig index 302c8bb..e8a43d0 100644 --- a/clap.zig +++ b/clap.zig @@ -641,12 +641,7 @@ test "Diagnostic.report" { /// Options that can be set to customize the behavior of parsing. pub const ParseOptions = struct { - /// The allocator used for all memory allocations. Defaults to the `heap.page_allocator`. - /// Note: You should probably override this allocator if you are calling `parseEx`. Unlike - /// `parse`, `parseEx` does not wrap the allocator so the heap allocator can be - /// quite expensive. (TODO: Can we pick a better default? For `parse`, this allocator - /// is fine, as it wraps it in an arena) - allocator: mem.Allocator = heap.page_allocator, + allocator: mem.Allocator, diagnostic: ?*Diagnostic = null, }; diff --git a/example/help.zig b/example/help.zig index e83ae44..2f063c5 100644 --- a/example/help.zig +++ b/example/help.zig @@ -2,13 +2,18 @@ const clap = @import("clap"); const std = @import("std"); pub fn main() !void { + var gpa = std.heap.GeneralPurposeAllocator(.{}){}; + defer _ = gpa.deinit(); + const params = comptime clap.parseParamsComptime( \\-h, --help Display this help and exit. \\-v, --version Output version information and exit. \\ ); - var res = try clap.parse(clap.Help, ¶ms, clap.parsers.default, .{}); + var res = try clap.parse(clap.Help, ¶ms, clap.parsers.default, .{ + .allocator = gpa.allocator(), + }); defer res.deinit(); // `clap.help` is a function that can print a simple help message. It can print any `Param` diff --git a/example/simple-ex.zig b/example/simple-ex.zig index dd5d929..436d058 100644 --- a/example/simple-ex.zig +++ b/example/simple-ex.zig @@ -6,6 +6,9 @@ const io = std.io; const process = std.process; pub fn main() !void { + var gpa = std.heap.GeneralPurposeAllocator(.{}){}; + defer _ = gpa.deinit(); + // First we specify what parameters our program can take. // We can use `parseParamsComptime` to parse a string into an array of `Param(Help)` const params = comptime clap.parseParamsComptime( @@ -30,6 +33,7 @@ pub fn main() !void { var diag = clap.Diagnostic{}; var res = clap.parse(clap.Help, ¶ms, parsers, .{ .diagnostic = &diag, + .allocator = gpa.allocator(), }) catch |err| { diag.report(io.getStdErr().writer(), err) catch {}; return err; diff --git a/example/simple.zig b/example/simple.zig index 429f095..a7207c7 100644 --- a/example/simple.zig +++ b/example/simple.zig @@ -5,6 +5,9 @@ const debug = std.debug; const io = std.io; pub fn main() !void { + var gpa = std.heap.GeneralPurposeAllocator(.{}){}; + defer _ = gpa.deinit(); + // First we specify what parameters our program can take. // We can use `parseParamsComptime` to parse a string into an array of `Param(Help)` const params = comptime clap.parseParamsComptime( @@ -21,6 +24,7 @@ pub fn main() !void { var diag = clap.Diagnostic{}; var res = clap.parse(clap.Help, ¶ms, clap.parsers.default, .{ .diagnostic = &diag, + .allocator = gpa.allocator(), }) catch |err| { // Report useful error and exit diag.report(io.getStdErr().writer(), err) catch {}; diff --git a/example/usage.zig b/example/usage.zig index 333536b..a773dd2 100644 --- a/example/usage.zig +++ b/example/usage.zig @@ -2,6 +2,9 @@ const clap = @import("clap"); const std = @import("std"); pub fn main() !void { + var gpa = std.heap.GeneralPurposeAllocator(.{}){}; + defer _ = gpa.deinit(); + const params = comptime clap.parseParamsComptime( \\-h, --help Display this help and exit. \\-v, --version Output version information and exit. @@ -9,7 +12,9 @@ pub fn main() !void { \\ ); - var res = try clap.parse(clap.Help, ¶ms, clap.parsers.default, .{}); + var res = try clap.parse(clap.Help, ¶ms, clap.parsers.default, .{ + .allocator = gpa.allocator(), + }); defer res.deinit(); // `clap.usage` is a function that can print a simple help message. It can print any `Param` -- cgit v1.2.3