authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2025-09-25 10:52:21-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2025-09-25 10:54:28-07:00
logdd2f1cbebf5982c254e2e2ee7ba46c9aca32fd9e
tree6f925209bef3ee25f52c7608c0bf908c54346232
parentccaf82d243fda453940ebb5679d6683089ed2b34

std.mem: rename chomp to cut


2 files changed, 58 insertions(+), 58 deletions(-)

lib/std/mem.zig+8-8
...@@ -3080,23 +3080,23 @@ test endsWith {...@@ -3080,23 +3080,23 @@ test endsWith {
3080}3080}
30813081
3082/// If `slice` starts with `prefix`, returns the rest of `slice` starting at `prefix.len`.3082/// If `slice` starts with `prefix`, returns the rest of `slice` starting at `prefix.len`.
3083pub fn chompPrefix(comptime T: type, slice: []const T, prefix: []const T) ?[]const T {3083pub fn cutPrefix(comptime T: type, slice: []const T, prefix: []const T) ?[]const T {
3084 return if (startsWith(T, slice, prefix)) slice[prefix.len..] else null;3084 return if (startsWith(T, slice, prefix)) slice[prefix.len..] else null;
3085}3085}
30863086
3087test chompPrefix {3087test cutPrefix {
3088 try testing.expectEqualStrings("foo", chompPrefix(u8, "--example=foo", "--example=").?);3088 try testing.expectEqualStrings("foo", cutPrefix(u8, "--example=foo", "--example=").?);
3089 try testing.expectEqual(null, chompPrefix(u8, "--example=foo", "-example="));3089 try testing.expectEqual(null, cutPrefix(u8, "--example=foo", "-example="));
3090}3090}
30913091
3092/// If `slice` ends with `suffix`, returns `slice` from beginning to start of `suffix`.3092/// If `slice` ends with `suffix`, returns `slice` from beginning to start of `suffix`.
3093pub fn chompSuffix(comptime T: type, slice: []const T, suffix: []const T) ?[]const T {3093pub fn cutSuffix(comptime T: type, slice: []const T, suffix: []const T) ?[]const T {
3094 return if (endsWith(T, slice, suffix)) slice[0 .. slice.len - suffix.len] else null;3094 return if (endsWith(T, slice, suffix)) slice[0 .. slice.len - suffix.len] else null;
3095}3095}
30963096
3097test chompSuffix {3097test cutSuffix {
3098 try testing.expectEqualStrings("foo", chompSuffix(u8, "foobar", "bar").?);3098 try testing.expectEqualStrings("foo", cutSuffix(u8, "foobar", "bar").?);
3099 try testing.expectEqual(null, chompSuffix(u8, "foobar", "baz"));3099 try testing.expectEqual(null, cutSuffix(u8, "foobar", "baz"));
3100}3100}
31013101
3102/// Delimiter type for tokenization and splitting operations.3102/// Delimiter type for tokenization and splitting operations.
src/main.zig+50-50
...@@ -1037,7 +1037,7 @@ fn buildOutputType(...@@ -1037,7 +1037,7 @@ fn buildOutputType(
10371037
1038 var file_ext: ?Compilation.FileExt = null;1038 var file_ext: ?Compilation.FileExt = null;
1039 args_loop: while (args_iter.next()) |arg| {1039 args_loop: while (args_iter.next()) |arg| {
1040 if (mem.chompPrefix(u8, arg, "@")) |resp_file_path| {1040 if (mem.cutPrefix(u8, arg, "@")) |resp_file_path| {
1041 // This is a "compiler response file". We must parse the file and treat its1041 // This is a "compiler response file". We must parse the file and treat its
1042 // contents as command line parameters.1042 // contents as command line parameters.
1043 args_iter.resp_file = initArgIteratorResponseFile(arena, resp_file_path) catch |err| {1043 args_iter.resp_file = initArgIteratorResponseFile(arena, resp_file_path) catch |err| {
...@@ -1076,7 +1076,7 @@ fn buildOutputType(...@@ -1076,7 +1076,7 @@ fn buildOutputType(
1076 .key = key,1076 .key = key,
1077 .value = value,1077 .value = value,
1078 });1078 });
1079 } else if (mem.chompPrefix(u8, arg, "-M")) |rest| {1079 } else if (mem.cutPrefix(u8, arg, "-M")) |rest| {
1080 var it = mem.splitScalar(u8, rest, '=');1080 var it = mem.splitScalar(u8, rest, '=');
1081 const mod_name = it.first();1081 const mod_name = it.first();
1082 const root_src_orig = if (it.peek() != null) it.rest() else null;1082 const root_src_orig = if (it.peek() != null) it.rest() else null;
...@@ -1110,7 +1110,7 @@ fn buildOutputType(...@@ -1110,7 +1110,7 @@ fn buildOutputType(
1110 }1110 }
1111 } else if (mem.eql(u8, arg, "-rcincludes")) {1111 } else if (mem.eql(u8, arg, "-rcincludes")) {
1112 rc_includes = parseRcIncludes(args_iter.nextOrFatal());1112 rc_includes = parseRcIncludes(args_iter.nextOrFatal());
1113 } else if (mem.chompPrefix(u8, arg, "-rcincludes=")) |rest| {1113 } else if (mem.cutPrefix(u8, arg, "-rcincludes=")) |rest| {
1114 rc_includes = parseRcIncludes(rest);1114 rc_includes = parseRcIncludes(rest);
1115 } else if (mem.eql(u8, arg, "-rcflags")) {1115 } else if (mem.eql(u8, arg, "-rcflags")) {
1116 extra_rcflags.shrinkRetainingCapacity(0);1116 extra_rcflags.shrinkRetainingCapacity(0);
...@@ -1132,7 +1132,7 @@ fn buildOutputType(...@@ -1132,7 +1132,7 @@ fn buildOutputType(
1132 color = std.meta.stringToEnum(Color, next_arg) orelse {1132 color = std.meta.stringToEnum(Color, next_arg) orelse {
1133 fatal("expected [auto|on|off] after --color, found '{s}'", .{next_arg});1133 fatal("expected [auto|on|off] after --color, found '{s}'", .{next_arg});
1134 };1134 };
1135 } else if (mem.chompPrefix(u8, arg, "-j")) |str| {1135 } else if (mem.cutPrefix(u8, arg, "-j")) |str| {
1136 const num = std.fmt.parseUnsigned(u32, str, 10) catch |err| {1136 const num = std.fmt.parseUnsigned(u32, str, 10) catch |err| {
1137 fatal("unable to parse jobs count '{s}': {s}", .{1137 fatal("unable to parse jobs count '{s}': {s}", .{
1138 str, @errorName(err),1138 str, @errorName(err),
...@@ -1146,7 +1146,7 @@ fn buildOutputType(...@@ -1146,7 +1146,7 @@ fn buildOutputType(
1146 subsystem = try parseSubSystem(args_iter.nextOrFatal());1146 subsystem = try parseSubSystem(args_iter.nextOrFatal());
1147 } else if (mem.eql(u8, arg, "-O")) {1147 } else if (mem.eql(u8, arg, "-O")) {
1148 mod_opts.optimize_mode = parseOptimizeMode(args_iter.nextOrFatal());1148 mod_opts.optimize_mode = parseOptimizeMode(args_iter.nextOrFatal());
1149 } else if (mem.chompPrefix(u8, arg, "-fentry=")) |rest| {1149 } else if (mem.cutPrefix(u8, arg, "-fentry=")) |rest| {
1150 entry = .{ .named = rest };1150 entry = .{ .named = rest };
1151 } else if (mem.eql(u8, arg, "--force_undefined")) {1151 } else if (mem.eql(u8, arg, "--force_undefined")) {
1152 try force_undefined_symbols.put(arena, args_iter.nextOrFatal(), {});1152 try force_undefined_symbols.put(arena, args_iter.nextOrFatal(), {});
...@@ -1174,7 +1174,7 @@ fn buildOutputType(...@@ -1174,7 +1174,7 @@ fn buildOutputType(
1174 try create_module.frameworks.put(arena, args_iter.nextOrFatal(), .{ .needed = true });1174 try create_module.frameworks.put(arena, args_iter.nextOrFatal(), .{ .needed = true });
1175 } else if (mem.eql(u8, arg, "-install_name")) {1175 } else if (mem.eql(u8, arg, "-install_name")) {
1176 install_name = args_iter.nextOrFatal();1176 install_name = args_iter.nextOrFatal();
1177 } else if (mem.chompPrefix(u8, arg, "--compress-debug-sections=")) |param| {1177 } else if (mem.cutPrefix(u8, arg, "--compress-debug-sections=")) |param| {
1178 linker_compress_debug_sections = std.meta.stringToEnum(link.File.Lld.Elf.CompressDebugSections, param) orelse {1178 linker_compress_debug_sections = std.meta.stringToEnum(link.File.Lld.Elf.CompressDebugSections, param) orelse {
1179 fatal("expected --compress-debug-sections=[none|zlib|zstd], found '{s}'", .{param});1179 fatal("expected --compress-debug-sections=[none|zlib|zstd], found '{s}'", .{param});
1180 };1180 };
...@@ -1272,7 +1272,7 @@ fn buildOutputType(...@@ -1272,7 +1272,7 @@ fn buildOutputType(
1272 try cc_argv.appendSlice(arena, &.{ arg, args_iter.nextOrFatal() });1272 try cc_argv.appendSlice(arena, &.{ arg, args_iter.nextOrFatal() });
1273 } else if (mem.eql(u8, arg, "-I")) {1273 } else if (mem.eql(u8, arg, "-I")) {
1274 try cssan.addIncludePath(arena, &cc_argv, .I, arg, args_iter.nextOrFatal(), false);1274 try cssan.addIncludePath(arena, &cc_argv, .I, arg, args_iter.nextOrFatal(), false);
1275 } else if (mem.chompPrefix(u8, arg, "--embed-dir=")) |rest| {1275 } else if (mem.cutPrefix(u8, arg, "--embed-dir=")) |rest| {
1276 try cssan.addIncludePath(arena, &cc_argv, .embed_dir, arg, rest, true);1276 try cssan.addIncludePath(arena, &cc_argv, .embed_dir, arg, rest, true);
1277 } else if (mem.eql(u8, arg, "-isystem")) {1277 } else if (mem.eql(u8, arg, "-isystem")) {
1278 try cssan.addIncludePath(arena, &cc_argv, .isystem, arg, args_iter.nextOrFatal(), false);1278 try cssan.addIncludePath(arena, &cc_argv, .isystem, arg, args_iter.nextOrFatal(), false);
...@@ -1300,13 +1300,13 @@ fn buildOutputType(...@@ -1300,13 +1300,13 @@ fn buildOutputType(
1300 target_mcpu = args_iter.nextOrFatal();1300 target_mcpu = args_iter.nextOrFatal();
1301 } else if (mem.eql(u8, arg, "-mcmodel")) {1301 } else if (mem.eql(u8, arg, "-mcmodel")) {
1302 mod_opts.code_model = parseCodeModel(args_iter.nextOrFatal());1302 mod_opts.code_model = parseCodeModel(args_iter.nextOrFatal());
1303 } else if (mem.chompPrefix(u8, arg, "-mcmodel=")) |rest| {1303 } else if (mem.cutPrefix(u8, arg, "-mcmodel=")) |rest| {
1304 mod_opts.code_model = parseCodeModel(rest);1304 mod_opts.code_model = parseCodeModel(rest);
1305 } else if (mem.chompPrefix(u8, arg, "-ofmt=")) |rest| {1305 } else if (mem.cutPrefix(u8, arg, "-ofmt=")) |rest| {
1306 create_module.object_format = rest;1306 create_module.object_format = rest;
1307 } else if (mem.chompPrefix(u8, arg, "-mcpu=")) |rest| {1307 } else if (mem.cutPrefix(u8, arg, "-mcpu=")) |rest| {
1308 target_mcpu = rest;1308 target_mcpu = rest;
1309 } else if (mem.chompPrefix(u8, arg, "-O")) |rest| {1309 } else if (mem.cutPrefix(u8, arg, "-O")) |rest| {
1310 mod_opts.optimize_mode = parseOptimizeMode(rest);1310 mod_opts.optimize_mode = parseOptimizeMode(rest);
1311 } else if (mem.eql(u8, arg, "--dynamic-linker")) {1311 } else if (mem.eql(u8, arg, "--dynamic-linker")) {
1312 create_module.dynamic_linker = args_iter.nextOrFatal();1312 create_module.dynamic_linker = args_iter.nextOrFatal();
...@@ -1405,7 +1405,7 @@ fn buildOutputType(...@@ -1405,7 +1405,7 @@ fn buildOutputType(
1405 create_module.opts.pie = false;1405 create_module.opts.pie = false;
1406 } else if (mem.eql(u8, arg, "-flto")) {1406 } else if (mem.eql(u8, arg, "-flto")) {
1407 create_module.opts.lto = .full;1407 create_module.opts.lto = .full;
1408 } else if (mem.chompPrefix(u8, arg, "-flto=")) |mode| {1408 } else if (mem.cutPrefix(u8, arg, "-flto=")) |mode| {
1409 if (mem.eql(u8, mode, "full")) {1409 if (mem.eql(u8, mode, "full")) {
1410 create_module.opts.lto = .full;1410 create_module.opts.lto = .full;
1411 } else if (mem.eql(u8, mode, "thin")) {1411 } else if (mem.eql(u8, mode, "thin")) {
...@@ -1439,7 +1439,7 @@ fn buildOutputType(...@@ -1439,7 +1439,7 @@ fn buildOutputType(
1439 mod_opts.omit_frame_pointer = false;1439 mod_opts.omit_frame_pointer = false;
1440 } else if (mem.eql(u8, arg, "-fsanitize-c")) {1440 } else if (mem.eql(u8, arg, "-fsanitize-c")) {
1441 mod_opts.sanitize_c = .full;1441 mod_opts.sanitize_c = .full;
1442 } else if (mem.chompPrefix(u8, arg, "-fsanitize-c=")) |mode| {1442 } else if (mem.cutPrefix(u8, arg, "-fsanitize-c=")) |mode| {
1443 if (mem.eql(u8, mode, "trap")) {1443 if (mem.eql(u8, mode, "trap")) {
1444 mod_opts.sanitize_c = .trap;1444 mod_opts.sanitize_c = .trap;
1445 } else if (mem.eql(u8, mode, "full")) {1445 } else if (mem.eql(u8, mode, "full")) {
...@@ -1487,7 +1487,7 @@ fn buildOutputType(...@@ -1487,7 +1487,7 @@ fn buildOutputType(
1487 create_module.opts.san_cov_trace_pc_guard = false;1487 create_module.opts.san_cov_trace_pc_guard = false;
1488 } else if (mem.eql(u8, arg, "-freference-trace")) {1488 } else if (mem.eql(u8, arg, "-freference-trace")) {
1489 reference_trace = 256;1489 reference_trace = 256;
1490 } else if (mem.chompPrefix(u8, arg, "-freference-trace=")) |num| {1490 } else if (mem.cutPrefix(u8, arg, "-freference-trace=")) |num| {
1491 reference_trace = std.fmt.parseUnsigned(u32, num, 10) catch |err| {1491 reference_trace = std.fmt.parseUnsigned(u32, num, 10) catch |err| {
1492 fatal("unable to parse reference_trace count '{s}': {s}", .{ num, @errorName(err) });1492 fatal("unable to parse reference_trace count '{s}': {s}", .{ num, @errorName(err) });
1493 };1493 };
...@@ -1501,50 +1501,50 @@ fn buildOutputType(...@@ -1501,50 +1501,50 @@ fn buildOutputType(
1501 create_module.opts.rdynamic = true;1501 create_module.opts.rdynamic = true;
1502 } else if (mem.eql(u8, arg, "-fsoname")) {1502 } else if (mem.eql(u8, arg, "-fsoname")) {
1503 soname = .yes_default_value;1503 soname = .yes_default_value;
1504 } else if (mem.chompPrefix(u8, arg, "-fsoname=")) |rest| {1504 } else if (mem.cutPrefix(u8, arg, "-fsoname=")) |rest| {
1505 soname = .{ .yes = rest };1505 soname = .{ .yes = rest };
1506 } else if (mem.eql(u8, arg, "-fno-soname")) {1506 } else if (mem.eql(u8, arg, "-fno-soname")) {
1507 soname = .no;1507 soname = .no;
1508 } else if (mem.eql(u8, arg, "-femit-bin")) {1508 } else if (mem.eql(u8, arg, "-femit-bin")) {
1509 emit_bin = .yes_default_path;1509 emit_bin = .yes_default_path;
1510 } else if (mem.chompPrefix(u8, arg, "-femit-bin=")) |rest| {1510 } else if (mem.cutPrefix(u8, arg, "-femit-bin=")) |rest| {
1511 emit_bin = .{ .yes = rest };1511 emit_bin = .{ .yes = rest };
1512 } else if (mem.eql(u8, arg, "-fno-emit-bin")) {1512 } else if (mem.eql(u8, arg, "-fno-emit-bin")) {
1513 emit_bin = .no;1513 emit_bin = .no;
1514 } else if (mem.eql(u8, arg, "-femit-h")) {1514 } else if (mem.eql(u8, arg, "-femit-h")) {
1515 emit_h = .yes_default_path;1515 emit_h = .yes_default_path;
1516 } else if (mem.chompPrefix(u8, arg, "-femit-h=")) |rest| {1516 } else if (mem.cutPrefix(u8, arg, "-femit-h=")) |rest| {
1517 emit_h = .{ .yes = rest };1517 emit_h = .{ .yes = rest };
1518 } else if (mem.eql(u8, arg, "-fno-emit-h")) {1518 } else if (mem.eql(u8, arg, "-fno-emit-h")) {
1519 emit_h = .no;1519 emit_h = .no;
1520 } else if (mem.eql(u8, arg, "-femit-asm")) {1520 } else if (mem.eql(u8, arg, "-femit-asm")) {
1521 emit_asm = .yes_default_path;1521 emit_asm = .yes_default_path;
1522 } else if (mem.chompPrefix(u8, arg, "-femit-asm=")) |rest| {1522 } else if (mem.cutPrefix(u8, arg, "-femit-asm=")) |rest| {
1523 emit_asm = .{ .yes = rest };1523 emit_asm = .{ .yes = rest };
1524 } else if (mem.eql(u8, arg, "-fno-emit-asm")) {1524 } else if (mem.eql(u8, arg, "-fno-emit-asm")) {
1525 emit_asm = .no;1525 emit_asm = .no;
1526 } else if (mem.eql(u8, arg, "-femit-llvm-ir")) {1526 } else if (mem.eql(u8, arg, "-femit-llvm-ir")) {
1527 emit_llvm_ir = .yes_default_path;1527 emit_llvm_ir = .yes_default_path;
1528 } else if (mem.chompPrefix(u8, arg, "-femit-llvm-ir=")) |rest| {1528 } else if (mem.cutPrefix(u8, arg, "-femit-llvm-ir=")) |rest| {
1529 emit_llvm_ir = .{ .yes = rest };1529 emit_llvm_ir = .{ .yes = rest };
1530 } else if (mem.eql(u8, arg, "-fno-emit-llvm-ir")) {1530 } else if (mem.eql(u8, arg, "-fno-emit-llvm-ir")) {
1531 emit_llvm_ir = .no;1531 emit_llvm_ir = .no;
1532 } else if (mem.eql(u8, arg, "-femit-llvm-bc")) {1532 } else if (mem.eql(u8, arg, "-femit-llvm-bc")) {
1533 emit_llvm_bc = .yes_default_path;1533 emit_llvm_bc = .yes_default_path;
1534 } else if (mem.chompPrefix(u8, arg, "-femit-llvm-bc=")) |rest| {1534 } else if (mem.cutPrefix(u8, arg, "-femit-llvm-bc=")) |rest| {
1535 emit_llvm_bc = .{ .yes = rest };1535 emit_llvm_bc = .{ .yes = rest };
1536 } else if (mem.eql(u8, arg, "-fno-emit-llvm-bc")) {1536 } else if (mem.eql(u8, arg, "-fno-emit-llvm-bc")) {
1537 emit_llvm_bc = .no;1537 emit_llvm_bc = .no;
1538 } else if (mem.eql(u8, arg, "-femit-docs")) {1538 } else if (mem.eql(u8, arg, "-femit-docs")) {
1539 emit_docs = .yes_default_path;1539 emit_docs = .yes_default_path;
1540 } else if (mem.chompPrefix(u8, arg, "-femit-docs=")) |rest| {1540 } else if (mem.cutPrefix(u8, arg, "-femit-docs=")) |rest| {
1541 emit_docs = .{ .yes = rest };1541 emit_docs = .{ .yes = rest };
1542 } else if (mem.eql(u8, arg, "-fno-emit-docs")) {1542 } else if (mem.eql(u8, arg, "-fno-emit-docs")) {
1543 emit_docs = .no;1543 emit_docs = .no;
1544 } else if (mem.eql(u8, arg, "-femit-implib")) {1544 } else if (mem.eql(u8, arg, "-femit-implib")) {
1545 emit_implib = .yes_default_path;1545 emit_implib = .yes_default_path;
1546 emit_implib_arg_provided = true;1546 emit_implib_arg_provided = true;
1547 } else if (mem.chompPrefix(u8, arg, "-femit-implib=")) |rest| {1547 } else if (mem.cutPrefix(u8, arg, "-femit-implib=")) |rest| {
1548 emit_implib = .{ .yes = rest };1548 emit_implib = .{ .yes = rest };
1549 emit_implib_arg_provided = true;1549 emit_implib_arg_provided = true;
1550 } else if (mem.eql(u8, arg, "-fno-emit-implib")) {1550 } else if (mem.eql(u8, arg, "-fno-emit-implib")) {
...@@ -1595,7 +1595,7 @@ fn buildOutputType(...@@ -1595,7 +1595,7 @@ fn buildOutputType(
1595 mod_opts.no_builtin = false;1595 mod_opts.no_builtin = false;
1596 } else if (mem.eql(u8, arg, "-fno-builtin")) {1596 } else if (mem.eql(u8, arg, "-fno-builtin")) {
1597 mod_opts.no_builtin = true;1597 mod_opts.no_builtin = true;
1598 } else if (mem.chompPrefix(u8, arg, "-fopt-bisect-limit=")) |next_arg| {1598 } else if (mem.cutPrefix(u8, arg, "-fopt-bisect-limit=")) |next_arg| {
1599 llvm_opt_bisect_limit = std.fmt.parseInt(c_int, next_arg, 0) catch |err|1599 llvm_opt_bisect_limit = std.fmt.parseInt(c_int, next_arg, 0) catch |err|
1600 fatal("unable to parse '{s}': {s}", .{ arg, @errorName(err) });1600 fatal("unable to parse '{s}': {s}", .{ arg, @errorName(err) });
1601 } else if (mem.eql(u8, arg, "--eh-frame-hdr")) {1601 } else if (mem.eql(u8, arg, "--eh-frame-hdr")) {
...@@ -1670,7 +1670,7 @@ fn buildOutputType(...@@ -1670,7 +1670,7 @@ fn buildOutputType(
1670 create_module.opts.shared_memory = true;1670 create_module.opts.shared_memory = true;
1671 } else if (prefixedIntArg(arg, "--global-base=")) |int| {1671 } else if (prefixedIntArg(arg, "--global-base=")) |int| {
1672 linker_global_base = int;1672 linker_global_base = int;
1673 } else if (mem.chompPrefix(u8, arg, "--export=")) |rest| {1673 } else if (mem.cutPrefix(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")) {
1676 linker_bind_global_refs_locally = true;1676 linker_bind_global_refs_locally = true;
...@@ -1680,7 +1680,7 @@ fn buildOutputType(...@@ -1680,7 +1680,7 @@ fn buildOutputType(
1680 linker_gc_sections = false;1680 linker_gc_sections = false;
1681 } else if (mem.eql(u8, arg, "--build-id")) {1681 } else if (mem.eql(u8, arg, "--build-id")) {
1682 build_id = .fast;1682 build_id = .fast;
1683 } else if (mem.chompPrefix(u8, arg, "--build-id=")) |style| {1683 } else if (mem.cutPrefix(u8, arg, "--build-id=")) |style| {
1684 build_id = std.zig.BuildId.parse(style) catch |err| {1684 build_id = std.zig.BuildId.parse(style) catch |err| {
1685 fatal("unable to parse --build-id style '{s}': {s}", .{1685 fatal("unable to parse --build-id style '{s}': {s}", .{
1686 style, @errorName(err),1686 style, @errorName(err),
...@@ -1704,21 +1704,21 @@ fn buildOutputType(...@@ -1704,21 +1704,21 @@ fn buildOutputType(
1704 verbose_generic_instances = true;1704 verbose_generic_instances = true;
1705 } else if (mem.eql(u8, arg, "--verbose-llvm-ir")) {1705 } else if (mem.eql(u8, arg, "--verbose-llvm-ir")) {
1706 verbose_llvm_ir = "-";1706 verbose_llvm_ir = "-";
1707 } else if (mem.chompPrefix(u8, arg, "--verbose-llvm-ir=")) |rest| {1707 } else if (mem.cutPrefix(u8, arg, "--verbose-llvm-ir=")) |rest| {
1708 verbose_llvm_ir = rest;1708 verbose_llvm_ir = rest;
1709 } else if (mem.chompPrefix(u8, arg, "--verbose-llvm-bc=")) |rest| {1709 } else if (mem.cutPrefix(u8, arg, "--verbose-llvm-bc=")) |rest| {
1710 verbose_llvm_bc = rest;1710 verbose_llvm_bc = rest;
1711 } else if (mem.eql(u8, arg, "--verbose-cimport")) {1711 } else if (mem.eql(u8, arg, "--verbose-cimport")) {
1712 verbose_cimport = true;1712 verbose_cimport = true;
1713 } else if (mem.eql(u8, arg, "--verbose-llvm-cpu-features")) {1713 } else if (mem.eql(u8, arg, "--verbose-llvm-cpu-features")) {
1714 verbose_llvm_cpu_features = true;1714 verbose_llvm_cpu_features = true;
1715 } else if (mem.chompPrefix(u8, arg, "-T")) |rest| {1715 } else if (mem.cutPrefix(u8, arg, "-T")) |rest| {
1716 linker_script = rest;1716 linker_script = rest;
1717 } else if (mem.chompPrefix(u8, arg, "-L")) |rest| {1717 } else if (mem.cutPrefix(u8, arg, "-L")) |rest| {
1718 try create_module.lib_dir_args.append(arena, rest);1718 try create_module.lib_dir_args.append(arena, rest);
1719 } else if (mem.chompPrefix(u8, arg, "-F")) |rest| {1719 } else if (mem.cutPrefix(u8, arg, "-F")) |rest| {
1720 try create_module.framework_dirs.append(arena, rest);1720 try create_module.framework_dirs.append(arena, rest);
1721 } else if (mem.chompPrefix(u8, arg, "-l")) |name| {1721 } else if (mem.cutPrefix(u8, arg, "-l")) |name| {
1722 // We don't know whether this library is part of libc1722 // We don't know whether this library is part of libc
1723 // or libc++ until we resolve the target, so we append1723 // or libc++ until we resolve the target, so we append
1724 // to the list for now.1724 // to the list for now.
...@@ -1732,7 +1732,7 @@ fn buildOutputType(...@@ -1732,7 +1732,7 @@ fn buildOutputType(
1732 .allow_so_scripts = allow_so_scripts,1732 .allow_so_scripts = allow_so_scripts,
1733 },1733 },
1734 } });1734 } });
1735 } else if (mem.chompPrefix(u8, arg, "-needed-l")) |name| {1735 } else if (mem.cutPrefix(u8, arg, "-needed-l")) |name| {
1736 try create_module.cli_link_inputs.append(arena, .{ .name_query = .{1736 try create_module.cli_link_inputs.append(arena, .{ .name_query = .{
1737 .name = name,1737 .name = name,
1738 .query = .{1738 .query = .{
...@@ -1743,7 +1743,7 @@ fn buildOutputType(...@@ -1743,7 +1743,7 @@ fn buildOutputType(
1743 .allow_so_scripts = allow_so_scripts,1743 .allow_so_scripts = allow_so_scripts,
1744 },1744 },
1745 } });1745 } });
1746 } else if (mem.chompPrefix(u8, arg, "-weak-l")) |name| {1746 } else if (mem.cutPrefix(u8, arg, "-weak-l")) |name| {
1747 try create_module.cli_link_inputs.append(arena, .{ .name_query = .{1747 try create_module.cli_link_inputs.append(arena, .{ .name_query = .{
1748 .name = name,1748 .name = name,
1749 .query = .{1749 .query = .{
...@@ -1756,9 +1756,9 @@ fn buildOutputType(...@@ -1756,9 +1756,9 @@ fn buildOutputType(
1756 } });1756 } });
1757 } else if (mem.startsWith(u8, arg, "-D")) {1757 } else if (mem.startsWith(u8, arg, "-D")) {
1758 try cc_argv.append(arena, arg);1758 try cc_argv.append(arena, arg);
1759 } else if (mem.chompPrefix(u8, arg, "-I")) |rest| {1759 } else if (mem.cutPrefix(u8, arg, "-I")) |rest| {
1760 try cssan.addIncludePath(arena, &cc_argv, .I, arg, rest, true);1760 try cssan.addIncludePath(arena, &cc_argv, .I, arg, rest, true);
1761 } else if (mem.chompPrefix(u8, arg, "-x")) |rest| {1761 } else if (mem.cutPrefix(u8, arg, "-x")) |rest| {
1762 const lang = if (rest.len == 0) args_iter.nextOrFatal() else rest;1762 const lang = if (rest.len == 0) args_iter.nextOrFatal() else rest;
1763 if (mem.eql(u8, lang, "none")) {1763 if (mem.eql(u8, lang, "none")) {
1764 file_ext = null;1764 file_ext = null;
...@@ -1767,7 +1767,7 @@ fn buildOutputType(...@@ -1767,7 +1767,7 @@ fn buildOutputType(
1767 } else {1767 } else {
1768 fatal("language not recognized: '{s}'", .{lang});1768 fatal("language not recognized: '{s}'", .{lang});
1769 }1769 }
1770 } else if (mem.chompPrefix(u8, arg, "-mexec-model=")) |rest| {1770 } else if (mem.cutPrefix(u8, arg, "-mexec-model=")) |rest| {
1771 create_module.opts.wasi_exec_model = parseWasiExecModel(rest);1771 create_module.opts.wasi_exec_model = parseWasiExecModel(rest);
1772 } else if (mem.eql(u8, arg, "-municode")) {1772 } else if (mem.eql(u8, arg, "-municode")) {
1773 mingw_unicode_entry_point = true;1773 mingw_unicode_entry_point = true;
...@@ -2446,7 +2446,7 @@ fn buildOutputType(...@@ -2446,7 +2446,7 @@ fn buildOutputType(
2446 linker_enable_new_dtags = false;2446 linker_enable_new_dtags = false;
2447 } else if (mem.eql(u8, arg, "-O")) {2447 } else if (mem.eql(u8, arg, "-O")) {
2448 linker_optimization = linker_args_it.nextOrFatal();2448 linker_optimization = linker_args_it.nextOrFatal();
2449 } else if (mem.chompPrefix(u8, arg, "-O")) |rest| {2449 } else if (mem.cutPrefix(u8, arg, "-O")) |rest| {
2450 linker_optimization = rest;2450 linker_optimization = rest;
2451 } else if (mem.eql(u8, arg, "-pagezero_size")) {2451 } else if (mem.eql(u8, arg, "-pagezero_size")) {
2452 const next_arg = linker_args_it.nextOrFatal();2452 const next_arg = linker_args_it.nextOrFatal();
...@@ -2529,7 +2529,7 @@ fn buildOutputType(...@@ -2529,7 +2529,7 @@ fn buildOutputType(
2529 linker_compress_debug_sections = std.meta.stringToEnum(link.File.Lld.Elf.CompressDebugSections, arg1) orelse {2529 linker_compress_debug_sections = std.meta.stringToEnum(link.File.Lld.Elf.CompressDebugSections, arg1) orelse {
2530 fatal("expected [none|zlib|zstd] after --compress-debug-sections, found '{s}'", .{arg1});2530 fatal("expected [none|zlib|zstd] after --compress-debug-sections, found '{s}'", .{arg1});
2531 };2531 };
2532 } else if (mem.chompPrefix(u8, arg, "-z")) |z_rest| {2532 } else if (mem.cutPrefix(u8, arg, "-z")) |z_rest| {
2533 const z_arg = if (z_rest.len == 0) linker_args_it.nextOrFatal() else z_rest;2533 const z_arg = if (z_rest.len == 0) linker_args_it.nextOrFatal() else z_rest;
2534 if (mem.eql(u8, z_arg, "nodelete")) {2534 if (mem.eql(u8, z_arg, "nodelete")) {
2535 linker_z_nodelete = true;2535 linker_z_nodelete = true;
...@@ -2553,7 +2553,7 @@ fn buildOutputType(...@@ -2553,7 +2553,7 @@ fn buildOutputType(
2553 linker_z_relro = true;2553 linker_z_relro = true;
2554 } else if (mem.eql(u8, z_arg, "norelro")) {2554 } else if (mem.eql(u8, z_arg, "norelro")) {
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.cutPrefix(u8, z_arg, "stack-size=")) |rest| {
2557 stack_size = parseStackSize(rest);2557 stack_size = parseStackSize(rest);
2558 } else if (prefixedIntArg(z_arg, "common-page-size=")) |int| {2558 } else if (prefixedIntArg(z_arg, "common-page-size=")) |int| {
2559 linker_z_common_page_size = int;2559 linker_z_common_page_size = int;
...@@ -2672,7 +2672,7 @@ fn buildOutputType(...@@ -2672,7 +2672,7 @@ fn buildOutputType(
2672 .allow_so_scripts = allow_so_scripts,2672 .allow_so_scripts = allow_so_scripts,
2673 },2673 },
2674 } });2674 } });
2675 } else if (mem.chompPrefix(u8, arg, "-weak-l")) |rest| {2675 } else if (mem.cutPrefix(u8, arg, "-weak-l")) |rest| {
2676 try create_module.cli_link_inputs.append(arena, .{ .name_query = .{2676 try create_module.cli_link_inputs.append(arena, .{ .name_query = .{
2677 .name = rest,2677 .name = rest,
2678 .query = .{2678 .query = .{
...@@ -3769,7 +3769,7 @@ fn createModule(...@@ -3769,7 +3769,7 @@ fn createModule(
3769 try mcpu_buffer.appendSlice(cli_mod.target_mcpu orelse "baseline");3769 try mcpu_buffer.appendSlice(cli_mod.target_mcpu orelse "baseline");
37703770
3771 for (create_module.llvm_m_args.items) |llvm_m_arg| {3771 for (create_module.llvm_m_args.items) |llvm_m_arg| {
3772 if (mem.chompPrefix(u8, llvm_m_arg, "mno-")) |llvm_name| {3772 if (mem.cutPrefix(u8, llvm_m_arg, "mno-")) |llvm_name| {
3773 const zig_name = llvm_to_zig_name.get(llvm_name) orelse {3773 const zig_name = llvm_to_zig_name.get(llvm_name) orelse {
3774 fatal("target architecture {s} has no LLVM CPU feature named '{s}'", .{3774 fatal("target architecture {s} has no LLVM CPU feature named '{s}'", .{
3775 @tagName(cpu_arch), llvm_name,3775 @tagName(cpu_arch), llvm_name,
...@@ -3777,7 +3777,7 @@ fn createModule(...@@ -3777,7 +3777,7 @@ fn createModule(
3777 };3777 };
3778 try mcpu_buffer.append('-');3778 try mcpu_buffer.append('-');
3779 try mcpu_buffer.appendSlice(zig_name);3779 try mcpu_buffer.appendSlice(zig_name);
3780 } else if (mem.chompPrefix(u8, llvm_m_arg, "m")) |llvm_name| {3780 } else if (mem.cutPrefix(u8, llvm_m_arg, "m")) |llvm_name| {
3781 const zig_name = llvm_to_zig_name.get(llvm_name) orelse {3781 const zig_name = llvm_to_zig_name.get(llvm_name) orelse {
3782 fatal("target architecture {s} has no LLVM CPU feature named '{s}'", .{3782 fatal("target architecture {s} has no LLVM CPU feature named '{s}'", .{
3783 @tagName(cpu_arch), llvm_name,3783 @tagName(cpu_arch), llvm_name,
...@@ -4964,7 +4964,7 @@ fn cmdBuild(gpa: Allocator, arena: Allocator, args: []const []const u8) !void {...@@ -4964,7 +4964,7 @@ fn cmdBuild(gpa: Allocator, arena: Allocator, args: []const []const u8) !void {
4964 reference_trace = 256;4964 reference_trace = 256;
4965 } else if (mem.eql(u8, arg, "--fetch")) {4965 } else if (mem.eql(u8, arg, "--fetch")) {
4966 fetch_only = true;4966 fetch_only = true;
4967 } else if (mem.chompPrefix(u8, arg, "--fetch=")) |sub_arg| {4967 } else if (mem.cutPrefix(u8, arg, "--fetch=")) |sub_arg| {
4968 fetch_only = true;4968 fetch_only = true;
4969 fetch_mode = std.meta.stringToEnum(Package.Fetch.JobQueue.Mode, sub_arg) orelse4969 fetch_mode = std.meta.stringToEnum(Package.Fetch.JobQueue.Mode, sub_arg) orelse
4970 fatal("expected [needed|all] after '--fetch=', found '{s}'", .{4970 fatal("expected [needed|all] after '--fetch=', found '{s}'", .{
...@@ -4976,7 +4976,7 @@ fn cmdBuild(gpa: Allocator, arena: Allocator, args: []const []const u8) !void {...@@ -4976,7 +4976,7 @@ fn cmdBuild(gpa: Allocator, arena: Allocator, args: []const []const u8) !void {
4976 system_pkg_dir_path = args[i];4976 system_pkg_dir_path = args[i];
4977 try child_argv.append("--system");4977 try child_argv.append("--system");
4978 continue;4978 continue;
4979 } else if (mem.chompPrefix(u8, arg, "-freference-trace=")) |num| {4979 } else if (mem.cutPrefix(u8, arg, "-freference-trace=")) |num| {
4980 reference_trace = std.fmt.parseUnsigned(u32, num, 10) catch |err| {4980 reference_trace = std.fmt.parseUnsigned(u32, num, 10) catch |err| {
4981 fatal("unable to parse reference_trace count '{s}': {s}", .{ num, @errorName(err) });4981 fatal("unable to parse reference_trace count '{s}': {s}", .{ num, @errorName(err) });
4982 };4982 };
...@@ -5026,9 +5026,9 @@ fn cmdBuild(gpa: Allocator, arena: Allocator, args: []const []const u8) !void {...@@ -5026,9 +5026,9 @@ fn cmdBuild(gpa: Allocator, arena: Allocator, args: []const []const u8) !void {
5026 verbose_generic_instances = true;5026 verbose_generic_instances = true;
5027 } else if (mem.eql(u8, arg, "--verbose-llvm-ir")) {5027 } else if (mem.eql(u8, arg, "--verbose-llvm-ir")) {
5028 verbose_llvm_ir = "-";5028 verbose_llvm_ir = "-";
5029 } else if (mem.chompPrefix(u8, arg, "--verbose-llvm-ir=")) |rest| {5029 } else if (mem.cutPrefix(u8, arg, "--verbose-llvm-ir=")) |rest| {
5030 verbose_llvm_ir = rest;5030 verbose_llvm_ir = rest;
5031 } else if (mem.chompPrefix(u8, arg, "--verbose-llvm-bc=")) |rest| {5031 } else if (mem.cutPrefix(u8, arg, "--verbose-llvm-bc=")) |rest| {
5032 verbose_llvm_bc = rest;5032 verbose_llvm_bc = rest;
5033 } else if (mem.eql(u8, arg, "--verbose-cimport")) {5033 } else if (mem.eql(u8, arg, "--verbose-cimport")) {
5034 verbose_cimport = true;5034 verbose_cimport = true;
...@@ -5042,7 +5042,7 @@ fn cmdBuild(gpa: Allocator, arena: Allocator, args: []const []const u8) !void {...@@ -5042,7 +5042,7 @@ fn cmdBuild(gpa: Allocator, arena: Allocator, args: []const []const u8) !void {
5042 };5042 };
5043 try child_argv.appendSlice(&.{ arg, args[i] });5043 try child_argv.appendSlice(&.{ arg, args[i] });
5044 continue;5044 continue;
5045 } else if (mem.chompPrefix(u8, arg, "-j")) |str| {5045 } else if (mem.cutPrefix(u8, arg, "-j")) |str| {
5046 const num = std.fmt.parseUnsigned(u32, str, 10) catch |err| {5046 const num = std.fmt.parseUnsigned(u32, str, 10) catch |err| {
5047 fatal("unable to parse jobs count '{s}': {s}", .{5047 fatal("unable to parse jobs count '{s}': {s}", .{
5048 str, @errorName(err),5048 str, @errorName(err),
...@@ -6618,7 +6618,7 @@ fn eatIntPrefix(arg: []const u8, base: u8) []const u8 {...@@ -6618,7 +6618,7 @@ fn eatIntPrefix(arg: []const u8, base: u8) []const u8 {
6618}6618}
66196619
6620fn prefixedIntArg(arg: []const u8, prefix: []const u8) ?u64 {6620fn prefixedIntArg(arg: []const u8, prefix: []const u8) ?u64 {
6621 const number = mem.chompPrefix(u8, arg, prefix) orelse return null;6621 const number = mem.cutPrefix(u8, arg, prefix) orelse return null;
6622 return std.fmt.parseUnsigned(u64, number, 0) catch |err| fatal("unable to parse '{s}': {t}", .{ arg, err });6622 return std.fmt.parseUnsigned(u64, number, 0) catch |err| fatal("unable to parse '{s}': {t}", .{ arg, err });
6623}6623}
66246624
...@@ -6946,11 +6946,11 @@ fn cmdFetch(...@@ -6946,11 +6946,11 @@ fn cmdFetch(
6946 debug_hash = true;6946 debug_hash = true;
6947 } else if (mem.eql(u8, arg, "--save")) {6947 } else if (mem.eql(u8, arg, "--save")) {
6948 save = .{ .yes = null };6948 save = .{ .yes = null };
6949 } else if (mem.chompPrefix(u8, arg, "--save=")) |rest| {6949 } else if (mem.cutPrefix(u8, arg, "--save=")) |rest| {
6950 save = .{ .yes = rest };6950 save = .{ .yes = rest };
6951 } else if (mem.eql(u8, arg, "--save-exact")) {6951 } else if (mem.eql(u8, arg, "--save-exact")) {
6952 save = .{ .exact = null };6952 save = .{ .exact = null };
6953 } else if (mem.chompPrefix(u8, arg, "--save-exact=")) |rest| {6953 } else if (mem.cutPrefix(u8, arg, "--save-exact=")) |rest| {
6954 save = .{ .exact = rest };6954 save = .{ .exact = rest };
6955 } else {6955 } else {
6956 fatal("unrecognized parameter: '{s}'", .{arg});6956 fatal("unrecognized parameter: '{s}'", .{arg});