From ccaf82d243fda453940ebb5679d6683089ed2b34 Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Wed, 24 Sep 2025 16:49:20 -0700 Subject: [PATCH] CLI: simpler semantics for prefixed integer args --- src/main.zig | 35 +++++++++++++++++------------------ 1 file changed, 17 insertions(+), 18 deletions(-) diff --git a/src/main.zig b/src/main.zig index 149f1e9310..0ac38e35e9 100644 --- a/src/main.zig +++ b/src/main.zig @@ -1638,10 +1638,10 @@ fn buildOutputType( linker_z_relro = true; } else if (mem.eql(u8, z_arg, "norelro")) { linker_z_relro = false; - } else if (mem.chompPrefix(u8, z_arg, "common-page-size=")) |rest| { - linker_z_common_page_size = parseIntSuffix(rest, 0); - } else if (mem.chompPrefix(u8, z_arg, "max-page-size=")) |rest| { - linker_z_max_page_size = parseIntSuffix(rest, 0); + } else if (prefixedIntArg(z_arg, "common-page-size=")) |int| { + linker_z_common_page_size = int; + } else if (prefixedIntArg(z_arg, "max-page-size=")) |int| { + linker_z_max_page_size = int; } else { fatal("unsupported linker extension flag: -z {s}", .{z_arg}); } @@ -1662,14 +1662,14 @@ fn buildOutputType( linker_import_table = true; } else if (mem.eql(u8, arg, "--export-table")) { linker_export_table = true; - } else if (mem.chompPrefix(u8, arg, "--initial-memory=")) |rest| { - linker_initial_memory = parseIntSuffix(rest, 0); - } else if (mem.chompPrefix(u8, arg, "--max-memory=")) |rest| { - linker_max_memory = parseIntSuffix(rest, 0); + } else if (prefixedIntArg(arg, "--initial-memory=")) |int| { + linker_initial_memory = int; + } else if (prefixedIntArg(arg, "--max-memory=")) |int| { + linker_max_memory = int; } else if (mem.eql(u8, arg, "--shared-memory")) { create_module.opts.shared_memory = true; - } else if (mem.chompPrefix(u8, arg, "--global-base=")) |rest| { - linker_global_base = parseIntSuffix(rest, 0); + } else if (prefixedIntArg(arg, "--global-base=")) |int| { + linker_global_base = int; } else if (mem.chompPrefix(u8, arg, "--export=")) |rest| { try linker_export_symbol_names.append(arena, rest); } else if (mem.eql(u8, arg, "-Bsymbolic")) { @@ -2555,10 +2555,10 @@ fn buildOutputType( linker_z_relro = false; } else if (mem.chompPrefix(u8, z_arg, "stack-size=")) |rest| { stack_size = parseStackSize(rest); - } else if (mem.chompPrefix(u8, z_arg, "common-page-size=")) |rest| { - linker_z_common_page_size = parseIntSuffix(rest, 0); - } else if (mem.chompPrefix(u8, z_arg, "max-page-size=")) |rest| { - linker_z_max_page_size = parseIntSuffix(rest, 0); + } else if (prefixedIntArg(z_arg, "common-page-size=")) |int| { + linker_z_common_page_size = int; + } else if (prefixedIntArg(z_arg, "max-page-size=")) |int| { + linker_z_max_page_size = int; } else { fatal("unsupported linker extension flag: -z {s}", .{z_arg}); } @@ -6617,10 +6617,9 @@ fn eatIntPrefix(arg: []const u8, base: u8) []const u8 { return arg; } -fn parseIntSuffix(arg: []const u8, prefix_len: usize) u64 { - return std.fmt.parseUnsigned(u64, arg[prefix_len..], 0) catch |err| { - fatal("unable to parse '{s}': {s}", .{ arg, @errorName(err) }); - }; +fn prefixedIntArg(arg: []const u8, prefix: []const u8) ?u64 { + const number = mem.chompPrefix(u8, arg, prefix) orelse return null; + return std.fmt.parseUnsigned(u64, number, 0) catch |err| fatal("unable to parse '{s}': {t}", .{ arg, err }); } fn warnAboutForeignBinaries(