authorgravatar for emekankurumeh@outlook.comemekoi <emekankurumeh@outlook.com> 2020-04-11 22:30:55-05:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2020-07-05 22:43:10+00:00
log68be2299172f6d87ed5db2ad2a7fcbdef2085725
tree71d2c3953c66756539db4b0dab464b13d7e5f5b9
parent27c1e0b453d50f8c242fd1153290a00b74dff018

added custom format method for WindowsVersion


3 files changed, 36 insertions(+), 23 deletions(-)

lib/std/target.zig+30
...@@ -101,6 +101,36 @@ pub const Target = struct {...@@ -101,6 +101,36 @@ pub const Target = struct {
101 return @enumToInt(ver) >= @enumToInt(self.min) and @enumToInt(ver) <= @enumToInt(self.max);101 return @enumToInt(ver) >= @enumToInt(self.min) and @enumToInt(ver) <= @enumToInt(self.max);
102 }102 }
103 };103 };
104
105 pub fn format(
106 self: WindowsVersion,
107 comptime fmt: []const u8,
108 options: std.fmt.FormatOptions,
109 out_stream: var,
110 ) !void {
111 if (fmt.len > 0 and fmt[0] == 's') {
112 if (
113 @enumToInt(self) >= @enumToInt(WindowsVersion.nt4) and @enumToInt(self) <= @enumToInt(WindowsVersion.win10_19h1)
114 ) {
115 try std.fmt.format(out_stream, ".{}", .{@tagName(self)});
116 } else {
117 try std.fmt.format(out_stream,
118 "@intToEnum(Target.Os.WindowsVersion, {})",
119 .{ @enumToInt(self) }
120 );
121 }
122 } else {
123 if (
124 @enumToInt(self) >= @enumToInt(WindowsVersion.nt4) and @enumToInt(self) <= @enumToInt(WindowsVersion.win10_19h1)
125 ) {
126 try std.fmt.format(out_stream, "WindowsVersion.{}", .{@tagName(self)});
127 } else {
128 try std.fmt.format(out_stream, "WindowsVersion(", .{@typeName(@This())});
129 try std.fmt.format(out_stream, "{}", .{@enumToInt(self)});
130 try out_stream.writeAll(")");
131 }
132 }
133 }
104 };134 };
105135
106 pub const LinuxVersionRange = struct {136 pub const LinuxVersionRange = struct {
lib/std/zig/cross_target.zig+2-2
...@@ -514,14 +514,14 @@ pub const CrossTarget = struct {...@@ -514,14 +514,14 @@ pub const CrossTarget = struct {
514 switch (self.getOsVersionMin()) {514 switch (self.getOsVersionMin()) {
515 .none => {},515 .none => {},
516 .semver => |v| try result.outStream().print(".{}", .{v}),516 .semver => |v| try result.outStream().print(".{}", .{v}),
517 .windows => |v| try result.outStream().print(".{}", .{@tagName(v)}),517 .windows => |v| try result.outStream().print("{s}", .{v}),
518 }518 }
519 }519 }
520 if (self.os_version_max) |max| {520 if (self.os_version_max) |max| {
521 switch (max) {521 switch (max) {
522 .none => {},522 .none => {},
523 .semver => |v| try result.outStream().print("...{}", .{v}),523 .semver => |v| try result.outStream().print("...{}", .{v}),
524 .windows => |v| try result.outStream().print("...{}", .{@tagName(v)}),524 .windows => |v| try result.outStream().print("..{s}", .{v}),
525 }525 }
526 }526 }
527527
src-self-hosted/stage2.zig+4-21
...@@ -653,23 +653,6 @@ export fn stage2_libc_render(stage1_libc: *Stage2LibCInstallation, output_file:...@@ -653,23 +653,6 @@ export fn stage2_libc_render(stage1_libc: *Stage2LibCInstallation, output_file:
653 return .None;653 return .None;
654}654}
655655
656fn enumToString(value: var, type_name: []const u8) ![]const u8 {
657 switch (@typeInfo(@TypeOf(value))) {
658 .Enum => |e| {
659 if (e.is_exhaustive) {
660 return std.fmt.allocPrint(std.heap.c_allocator, ".{}", .{@tagName(value)});
661 } else {
662 return std.fmt.allocPrint(
663 std.heap.c_allocator,
664 "@intToEnum({}, {})",
665 .{ type_name, @enumToInt(value) },
666 );
667 }
668 },
669 else => unreachable,
670 }
671}
672
673// ABI warning656// ABI warning
674const Stage2Target = extern struct {657const Stage2Target = extern struct {
675 arch: c_int,658 arch: c_int,
...@@ -887,13 +870,13 @@ const Stage2Target = extern struct {...@@ -887,13 +870,13 @@ const Stage2Target = extern struct {
887870
888 .windows => try os_builtin_str_buffer.outStream().print(871 .windows => try os_builtin_str_buffer.outStream().print(
889 \\ .windows = .{{872 \\ .windows = .{{
890 \\ .min = {},873 \\ .min = {s},
891 \\ .max = {},874 \\ .max = {s},
892 \\ }}}},875 \\ }}}},
893 \\876 \\
894 , .{877 , .{
895 try enumToString(target.os.version_range.windows.min, "Target.Os.WindowsVersion"),878 target.os.version_range.windows.min,
896 try enumToString(target.os.version_range.windows.max, "Target.Os.WindowsVersion"),879 target.os.version_range.windows.max,
897 }),880 }),
898 }881 }
899 try os_builtin_str_buffer.appendSlice("};\n");882 try os_builtin_str_buffer.appendSlice("};\n");