diff --git a/doc/langref.html.in b/doc/langref.html.in index 81ccd58261..13c7da4a8a 100644 --- a/doc/langref.html.in +++ b/doc/langref.html.in @@ -574,7 +574,7 @@ pub fn main() void { var optional_value: ?[]const u8 = null; assert(optional_value == null); - print("\noptional 1\ntype: {s}\nvalue: {?s}\n", .{ + print("\noptional 1\ntype: {s}\nvalue: {s}\n", .{ @typeName(@TypeOf(optional_value)), optional_value, }); @@ -582,7 +582,7 @@ pub fn main() void { optional_value = "hi"; assert(optional_value != null); - print("\noptional 2\ntype: {s}\nvalue: {?s}\n", .{ + print("\noptional 2\ntype: {s}\nvalue: {s}\n", .{ @typeName(@TypeOf(optional_value)), optional_value, }); @@ -590,14 +590,14 @@ pub fn main() void { // error union var number_or_error: anyerror!i32 = error.ArgNotFound; - print("\nerror union 1\ntype: {s}\nvalue: {!}\n", .{ + print("\nerror union 1\ntype: {s}\nvalue: {}\n", .{ @typeName(@TypeOf(number_or_error)), number_or_error, }); number_or_error = 1234; - print("\nerror union 2\ntype: {s}\nvalue: {!}\n", .{ + print("\nerror union 2\ntype: {s}\nvalue: {}\n", .{ @typeName(@TypeOf(number_or_error)), number_or_error, }); diff --git a/lib/std/build.zig b/lib/std/build.zig index e20f793209..83e30b278f 100644 --- a/lib/std/build.zig +++ b/lib/std/build.zig @@ -750,7 +750,7 @@ pub const Builder = struct { \\Available CPU features for architecture '{s}': \\ , .{ - diags.unknown_feature_name.?, + diags.unknown_feature_name, @tagName(diags.arch.?), }); for (diags.arch.?.allFeaturesList()) |feature| { @@ -764,7 +764,7 @@ pub const Builder = struct { \\Unknown OS: '{s}' \\Available operating systems: \\ - , .{diags.os_name.?}); + , .{diags.os_name}); inline for (std.meta.fields(std.Target.Os.Tag)) |field| { log.err(" {s}", .{field.name}); } diff --git a/lib/std/crypto/phc_encoding.zig b/lib/std/crypto/phc_encoding.zig index a3796dc436..69324dc5b3 100644 --- a/lib/std/crypto/phc_encoding.zig +++ b/lib/std/crypto/phc_encoding.zig @@ -216,7 +216,7 @@ fn serializeTo(params: anytype, out: anytype) !void { var has_params = false; inline for (comptime meta.fields(HashResult)) |p| { - if (comptime !(mem.eql(u8, p.name, "alg_id") or + if (!(mem.eql(u8, p.name, "alg_id") or mem.eql(u8, p.name, "alg_version") or mem.eql(u8, p.name, "hash") or mem.eql(u8, p.name, "salt"))) diff --git a/lib/std/fmt.zig b/lib/std/fmt.zig index 52f0cb4841..a506d8f395 100644 --- a/lib/std/fmt.zig +++ b/lib/std/fmt.zig @@ -60,10 +60,8 @@ pub const FormatOptions = struct { /// - `o`: output integer value in octal notation /// - `c`: output integer as an ASCII character. Integer type must have 8 bits at max. /// - `u`: output integer as an UTF-8 sequence. Integer type must have 21 bits at max. -/// - `?`: output optional value as either the unwrapped value, or `null`; may be followed by a format specifier for the underlying value. -/// - `!`: output error union value as either the unwrapped value, or the formatted error value; may be followed by a format specifier for the underlying value. /// - `*`: output the address of the value instead of the value itself. -/// - `any`: output a value of any type using its default format. +/// - `any`: output a value of any type using its default format /// /// If a formatted user type contains a function of the type /// ``` @@ -440,20 +438,12 @@ fn defaultSpec(comptime T: type) [:0]const u8 { .Many, .C => return "*", .Slice => return ANY, }, - .Optional => |info| return "?" ++ defaultSpec(info.child), - .ErrorUnion => |info| return "!" ++ defaultSpec(info.payload), + .Optional => |info| return defaultSpec(info.child), else => {}, } return ""; } -fn stripOptionalOrErrorUnionSpec(comptime fmt: []const u8) []const u8 { - return if (std.mem.eql(u8, fmt[1..], ANY)) - ANY - else - fmt[1..]; -} - pub fn formatType( value: anytype, comptime fmt: []const u8, @@ -461,18 +451,12 @@ pub fn formatType( writer: anytype, max_depth: usize, ) @TypeOf(writer).Error!void { - const T = @TypeOf(value); - const actual_fmt = comptime if (std.mem.eql(u8, fmt, ANY)) - defaultSpec(@TypeOf(value)) - else if (fmt.len != 0 and (fmt[0] == '?' or fmt[0] == '!')) switch (@typeInfo(T)) { - .Optional, .ErrorUnion => fmt, - else => stripOptionalOrErrorUnionSpec(fmt), - } else fmt; - + const actual_fmt = comptime if (std.mem.eql(u8, fmt, ANY)) defaultSpec(@TypeOf(value)) else fmt; if (comptime std.mem.eql(u8, actual_fmt, "*")) { return formatAddress(value, options, writer); } + const T = @TypeOf(value); if (comptime std.meta.trait.hasFn("format")(T)) { return try value.format(actual_fmt, options, writer); } @@ -488,23 +472,17 @@ pub fn formatType( return formatBuf(if (value) "true" else "false", options, writer); }, .Optional => { - if (actual_fmt.len == 0 or actual_fmt[0] != '?') - @compileError("cannot format optional without a specifier (i.e. {?} or {any})"); - const remaining_fmt = comptime stripOptionalOrErrorUnionSpec(actual_fmt); if (value) |payload| { - return formatType(payload, remaining_fmt, options, writer, max_depth); + return formatType(payload, actual_fmt, options, writer, max_depth); } else { return formatBuf("null", options, writer); } }, .ErrorUnion => { - if (actual_fmt.len == 0 or actual_fmt[0] != '!') - @compileError("cannot format error union without a specifier (i.e. {!} or {any})"); - const remaining_fmt = comptime stripOptionalOrErrorUnionSpec(actual_fmt); if (value) |payload| { - return formatType(payload, remaining_fmt, options, writer, max_depth); + return formatType(payload, actual_fmt, options, writer, max_depth); } else |err| { - return formatType(err, remaining_fmt, options, writer, max_depth); + return formatType(err, actual_fmt, options, writer, max_depth); } }, .ErrorSet => { @@ -1999,11 +1977,11 @@ test "escaped braces" { test "optional" { { const value: ?i32 = 1234; - try expectFmt("optional: 1234\n", "optional: {?}\n", .{value}); + try expectFmt("optional: 1234\n", "optional: {}\n", .{value}); } { const value: ?i32 = null; - try expectFmt("optional: null\n", "optional: {?}\n", .{value}); + try expectFmt("optional: null\n", "optional: {}\n", .{value}); } { const value = @intToPtr(?*i32, 0xf000d000); @@ -2014,11 +1992,11 @@ test "optional" { test "error" { { const value: anyerror!i32 = 1234; - try expectFmt("error union: 1234\n", "error union: {!}\n", .{value}); + try expectFmt("error union: 1234\n", "error union: {}\n", .{value}); } { const value: anyerror!i32 = error.InvalidChar; - try expectFmt("error union: error.InvalidChar\n", "error union: {!}\n", .{value}); + try expectFmt("error union: error.InvalidChar\n", "error union: {}\n", .{value}); } } diff --git a/lib/std/x/os/net.zig b/lib/std/x/os/net.zig index d8af2b3577..d9eb910b79 100644 --- a/lib/std/x/os/net.zig +++ b/lib/std/x/os/net.zig @@ -544,7 +544,7 @@ test "ip: convert to and from ipv6" { try testing.expect(IPv4.localhost.mapToIPv6().mapsToIPv4()); try testing.expect(IPv4.localhost.toIPv6().toIPv4() == null); - try testing.expectFmt("127.0.0.1", "{?}", .{IPv4.localhost.mapToIPv6().toIPv4()}); + try testing.expectFmt("127.0.0.1", "{}", .{IPv4.localhost.mapToIPv6().toIPv4()}); } test "ipv4: parse & format" { diff --git a/src/Cache.zig b/src/Cache.zig index 829d903e5a..0d4b51492d 100644 --- a/src/Cache.zig +++ b/src/Cache.zig @@ -747,7 +747,7 @@ pub const Manifest = struct { file.stat.inode, file.stat.mtime, &encoded_digest, - file.path.?, + file.path, }); } diff --git a/src/Compilation.zig b/src/Compilation.zig index 300a02a881..5204910193 100644 --- a/src/Compilation.zig +++ b/src/Compilation.zig @@ -1465,7 +1465,7 @@ pub fn create(gpa: Allocator, options: InitOptions) !*Compilation { .handle = artifact_dir, .path = try options.local_cache_directory.join(arena, &[_][]const u8{artifact_sub_dir}), }; - log.debug("zig_cache_artifact_directory='{?s}' use_stage1={}", .{ + log.debug("zig_cache_artifact_directory='{s}' use_stage1={}", .{ zig_cache_artifact_directory.path, use_stage1, }); diff --git a/src/link/MachO.zig b/src/link/MachO.zig index b90bc8bdee..0f2cbfa844 100644 --- a/src/link/MachO.zig +++ b/src/link/MachO.zig @@ -363,7 +363,7 @@ pub fn openPath(allocator: Allocator, options: link.Options) !*MachO { // Create dSYM bundle. const dir = options.module.?.zig_cache_artifact_directory; - log.debug("creating {s}.dSYM bundle in {?s}", .{ emit.sub_path, dir.path }); + log.debug("creating {s}.dSYM bundle in {s}", .{ emit.sub_path, dir.path }); const d_sym_path = try fmt.allocPrint( allocator, diff --git a/src/link/Wasm.zig b/src/link/Wasm.zig index 30e2192268..41ee8392ec 100644 --- a/src/link/Wasm.zig +++ b/src/link/Wasm.zig @@ -1629,7 +1629,7 @@ fn setupMemory(self: *Wasm) !void { return error.MemoryTooBig; } self.memories.limits.max = @intCast(u32, max_memory / page_size); - log.debug("Maximum memory pages: {?d}", .{self.memories.limits.max}); + log.debug("Maximum memory pages: {d}", .{self.memories.limits.max}); } } diff --git a/src/link/Wasm/Object.zig b/src/link/Wasm/Object.zig index a1308ec045..9dba838d27 100644 --- a/src/link/Wasm/Object.zig +++ b/src/link/Wasm/Object.zig @@ -548,7 +548,7 @@ fn Parser(comptime ReaderType: type) type { .index = try leb.readULEB128(u32, reader), .addend = if (rel_type_enum.addendIsPresent()) try leb.readULEB128(u32, reader) else null, }; - log.debug("Found relocation: type({s}) offset({d}) index({d}) addend({?d})", .{ + log.debug("Found relocation: type({s}) offset({d}) index({d}) addend({d})", .{ @tagName(relocation.relocation_type), relocation.offset, relocation.index, diff --git a/src/main.zig b/src/main.zig index c9b9d1c0af..27682003f2 100644 --- a/src/main.zig +++ b/src/main.zig @@ -3168,7 +3168,7 @@ fn parseCrossTargetOrReportFatalError( @tagName(diags.arch.?), help_text.items, }); } - fatal("Unknown CPU feature: '{s}'", .{diags.unknown_feature_name.?}); + fatal("Unknown CPU feature: '{s}'", .{diags.unknown_feature_name}); }, else => |e| return e, }; @@ -3496,8 +3496,7 @@ fn cmdTranslateC(comp: *Compilation, arena: Allocator, enable_cache: bool, stage } else { const out_zig_path = try fs.path.join(arena, &[_][]const u8{ "o", &digest, translated_zig_basename }); const zig_file = comp.local_cache_directory.handle.openFile(out_zig_path, .{}) catch |err| { - const path = comp.local_cache_directory.path orelse "."; - fatal("unable to open cached translated zig file '{s}{s}{s}': {s}", .{ path, fs.path.sep_str, out_zig_path, @errorName(err) }); + fatal("unable to open cached translated zig file '{s}{s}{s}': {s}", .{ comp.local_cache_directory.path, fs.path.sep_str, out_zig_path, @errorName(err) }); }; defer zig_file.close(); try io.getStdOut().writeFileAll(zig_file, .{}); @@ -3627,8 +3626,7 @@ pub fn cmdInit( .Exe => "init-exe", }; var template_dir = zig_lib_directory.handle.openDir(template_sub_path, .{}) catch |err| { - const path = zig_lib_directory.path orelse "."; - fatal("unable to open zig project template directory '{s}{s}{s}': {s}", .{ path, s, template_sub_path, @errorName(err) }); + fatal("unable to open zig project template directory '{s}{s}{s}': {s}", .{ zig_lib_directory.path, s, template_sub_path, @errorName(err) }); }; defer template_dir.close(); diff --git a/src/register_manager.zig b/src/register_manager.zig index 0ab9d103b8..0bd9ef62e9 100644 --- a/src/register_manager.zig +++ b/src/register_manager.zig @@ -301,7 +301,7 @@ pub fn RegisterManager( /// register. pub fn getReg(self: *Self, reg: Register, inst: ?Air.Inst.Index) AllocateRegistersError!void { const index = indexOfRegIntoTracked(reg) orelse return; - log.debug("getReg {} for inst {?}", .{ reg, inst }); + log.debug("getReg {} for inst {}", .{ reg, inst }); self.markRegAllocated(reg); if (inst) |tracked_inst| diff --git a/src/translate_c.zig b/src/translate_c.zig index a64d00829a..53481c8f5d 100644 --- a/src/translate_c.zig +++ b/src/translate_c.zig @@ -2765,7 +2765,7 @@ fn transInitListExpr( qual_type, )); } else { - const type_name = try c.str(qual_type.getTypeClassName()); + const type_name = c.str(qual_type.getTypeClassName()); return fail(c, error.UnsupportedType, source_loc, "unsupported initlist type: '{s}'", .{type_name}); } } @@ -4812,11 +4812,11 @@ fn transType(c: *Context, scope: *Scope, ty: *const clang.Type, source_loc: clan }); }, .BitInt, .ExtVector => { - const type_name = try c.str(ty.getTypeClassName()); + const type_name = c.str(ty.getTypeClassName()); return fail(c, error.UnsupportedType, source_loc, "TODO implement translation of type: '{s}'", .{type_name}); }, else => { - const type_name = try c.str(ty.getTypeClassName()); + const type_name = c.str(ty.getTypeClassName()); return fail(c, error.UnsupportedType, source_loc, "unsupported type: '{s}'", .{type_name}); }, } @@ -5052,8 +5052,8 @@ fn finishTransFnProto( } fn warn(c: *Context, scope: *Scope, loc: clang.SourceLocation, comptime format: []const u8, args: anytype) !void { - const str = try c.locStr(loc); - const value = try std.fmt.allocPrint(c.arena, "// {s}: warning: " ++ format, .{str} ++ args); + const args_prefix = .{c.locStr(loc)}; + const value = try std.fmt.allocPrint(c.arena, "// {s}: warning: " ++ format, args_prefix ++ args); try scope.appendNode(try Tag.warning.create(c.arena, value)); } @@ -5073,8 +5073,7 @@ pub fn failDecl(c: *Context, loc: clang.SourceLocation, name: []const u8, compti // pub const name = @compileError(msg); const fail_msg = try std.fmt.allocPrint(c.arena, format, args); try addTopLevelDecl(c, name, try Tag.fail_decl.create(c.arena, .{ .actual = name, .mangled = fail_msg })); - const str = try c.locStr(loc); - const location_comment = try std.fmt.allocPrint(c.arena, "// {s}", .{str}); + const location_comment = try std.fmt.allocPrint(c.arena, "// {s}", .{c.locStr(loc)}); try c.global_scope.nodes.append(try Tag.warning.create(c.arena, location_comment)); }