authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2025-09-24 16:49:20-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2025-09-25 10:50:41-07:00
logccaf82d243fda453940ebb5679d6683089ed2b34
tree0eb72277889bdc0f9980f9b1862f63f8bc30681f
parent513389bc5bd709ee5cccdf93e2881a62aca6eced

CLI: simpler semantics for prefixed integer args


1 files changed, 17 insertions(+), 18 deletions(-)

src/main.zig+17-18
...@@ -1638,10 +1638,10 @@ fn buildOutputType(...@@ -1638,10 +1638,10 @@ fn buildOutputType(
1638 linker_z_relro = true;1638 linker_z_relro = true;
1639 } else if (mem.eql(u8, z_arg, "norelro")) {1639 } else if (mem.eql(u8, z_arg, "norelro")) {
1640 linker_z_relro = false;1640 linker_z_relro = false;
1641 } else if (mem.chompPrefix(u8, z_arg, "common-page-size=")) |rest| {1641 } else if (prefixedIntArg(z_arg, "common-page-size=")) |int| {
1642 linker_z_common_page_size = parseIntSuffix(rest, 0);1642 linker_z_common_page_size = int;
1643 } else if (mem.chompPrefix(u8, z_arg, "max-page-size=")) |rest| {1643 } else if (prefixedIntArg(z_arg, "max-page-size=")) |int| {
1644 linker_z_max_page_size = parseIntSuffix(rest, 0);1644 linker_z_max_page_size = int;
1645 } else {1645 } else {
1646 fatal("unsupported linker extension flag: -z {s}", .{z_arg});1646 fatal("unsupported linker extension flag: -z {s}", .{z_arg});
1647 }1647 }
...@@ -1662,14 +1662,14 @@ fn buildOutputType(...@@ -1662,14 +1662,14 @@ fn buildOutputType(
1662 linker_import_table = true;1662 linker_import_table = true;
1663 } else if (mem.eql(u8, arg, "--export-table")) {1663 } else if (mem.eql(u8, arg, "--export-table")) {
1664 linker_export_table = true;1664 linker_export_table = true;
1665 } else if (mem.chompPrefix(u8, arg, "--initial-memory=")) |rest| {1665 } else if (prefixedIntArg(arg, "--initial-memory=")) |int| {
1666 linker_initial_memory = parseIntSuffix(rest, 0);1666 linker_initial_memory = int;
1667 } else if (mem.chompPrefix(u8, arg, "--max-memory=")) |rest| {1667 } else if (prefixedIntArg(arg, "--max-memory=")) |int| {
1668 linker_max_memory = parseIntSuffix(rest, 0);1668 linker_max_memory = int;
1669 } else if (mem.eql(u8, arg, "--shared-memory")) {1669 } else if (mem.eql(u8, arg, "--shared-memory")) {
1670 create_module.opts.shared_memory = true;1670 create_module.opts.shared_memory = true;
1671 } else if (mem.chompPrefix(u8, arg, "--global-base=")) |rest| {1671 } else if (prefixedIntArg(arg, "--global-base=")) |int| {
1672 linker_global_base = parseIntSuffix(rest, 0);1672 linker_global_base = int;
1673 } else if (mem.chompPrefix(u8, arg, "--export=")) |rest| {1673 } else if (mem.chompPrefix(u8, arg, "--export=")) |rest| {
1674 try linker_export_symbol_names.append(arena, rest);1674 try linker_export_symbol_names.append(arena, rest);
1675 } else if (mem.eql(u8, arg, "-Bsymbolic")) {1675 } else if (mem.eql(u8, arg, "-Bsymbolic")) {
...@@ -2555,10 +2555,10 @@ fn buildOutputType(...@@ -2555,10 +2555,10 @@ fn buildOutputType(
2555 linker_z_relro = false;2555 linker_z_relro = false;
2556 } else if (mem.chompPrefix(u8, z_arg, "stack-size=")) |rest| {2556 } else if (mem.chompPrefix(u8, z_arg, "stack-size=")) |rest| {
2557 stack_size = parseStackSize(rest);2557 stack_size = parseStackSize(rest);
2558 } else if (mem.chompPrefix(u8, z_arg, "common-page-size=")) |rest| {2558 } else if (prefixedIntArg(z_arg, "common-page-size=")) |int| {
2559 linker_z_common_page_size = parseIntSuffix(rest, 0);2559 linker_z_common_page_size = int;
2560 } else if (mem.chompPrefix(u8, z_arg, "max-page-size=")) |rest| {2560 } else if (prefixedIntArg(z_arg, "max-page-size=")) |int| {
2561 linker_z_max_page_size = parseIntSuffix(rest, 0);2561 linker_z_max_page_size = int;
2562 } else {2562 } else {
2563 fatal("unsupported linker extension flag: -z {s}", .{z_arg});2563 fatal("unsupported linker extension flag: -z {s}", .{z_arg});
2564 }2564 }
...@@ -6617,10 +6617,9 @@ fn eatIntPrefix(arg: []const u8, base: u8) []const u8 {...@@ -6617,10 +6617,9 @@ fn eatIntPrefix(arg: []const u8, base: u8) []const u8 {
6617 return arg;6617 return arg;
6618}6618}
66196619
6620fn parseIntSuffix(arg: []const u8, prefix_len: usize) u64 {6620fn prefixedIntArg(arg: []const u8, prefix: []const u8) ?u64 {
6621 return std.fmt.parseUnsigned(u64, arg[prefix_len..], 0) catch |err| {6621 const number = mem.chompPrefix(u8, arg, prefix) orelse return null;
6622 fatal("unable to parse '{s}': {s}", .{ arg, @errorName(err) });6622 return std.fmt.parseUnsigned(u64, number, 0) catch |err| fatal("unable to parse '{s}': {t}", .{ arg, err });
6623 };
6624}6623}
66256624
6626fn warnAboutForeignBinaries(6625fn warnAboutForeignBinaries(