| author | |
| committer | |
| log | 682fccaaf0413f4daba43b6990494866bd7b9afd |
| tree | 141ddbb1f0fb0ceb928a78a002eccdc7fc2e535c |
| parent | 27c1e0b453d50f8c242fd1153290a00b74dff018 |
| parent | 86ef3202dd5f4198411b39abdbea293832ebaad9 |
closes #50113 files changed, 38 insertions(+), 23 deletions(-)
lib/std/target.zig+32| ... | @@ -101,6 +101,38 @@ pub const Target = struct { | ... | @@ -101,6 +101,38 @@ 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 | /// This function is defined to serialize a Zig source code representation of this | ||
| 106 | /// type, that, when parsed, will deserialize into the same data. | ||
| 107 | pub fn format( | ||
| 108 | self: WindowsVersion, | ||
| 109 | comptime fmt: []const u8, | ||
| 110 | options: std.fmt.FormatOptions, | ||
| 111 | out_stream: var, | ||
| 112 | ) !void { | ||
| 113 | if (fmt.len > 0 and fmt[0] == 's') { | ||
| 114 | if ( | ||
| 115 | @enumToInt(self) >= @enumToInt(WindowsVersion.nt4) and @enumToInt(self) <= @enumToInt(WindowsVersion.win10_19h1) | ||
| 116 | ) { | ||
| 117 | try std.fmt.format(out_stream, ".{}", .{@tagName(self)}); | ||
| 118 | } else { | ||
| 119 | try std.fmt.format(out_stream, | ||
| 120 | "@intToEnum(Target.Os.WindowsVersion, {})", | ||
| 121 | .{ @enumToInt(self) } | ||
| 122 | ); | ||
| 123 | } | ||
| 124 | } else { | ||
| 125 | if ( | ||
| 126 | @enumToInt(self) >= @enumToInt(WindowsVersion.nt4) and @enumToInt(self) <= @enumToInt(WindowsVersion.win10_19h1) | ||
| 127 | ) { | ||
| 128 | try std.fmt.format(out_stream, "WindowsVersion.{}", .{@tagName(self)}); | ||
| 129 | } else { | ||
| 130 | try std.fmt.format(out_stream, "WindowsVersion(", .{@typeName(@This())}); | ||
| 131 | try std.fmt.format(out_stream, "{}", .{@enumToInt(self)}); | ||
| 132 | try out_stream.writeAll(")"); | ||
| 133 | } | ||
| 134 | } | ||
| 135 | } | ||
| 104 | }; | 136 | }; |
| 105 | 137 | ||
| 106 | pub const LinuxVersionRange = struct { | 138 | 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 | } |
| 527 | 527 |
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 | } |
| 655 | 655 | ||
| 656 | fn 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 warning | 656 | // ABI warning |
| 674 | const Stage2Target = extern struct { | 657 | const 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 { |
| 887 | 870 | ||
| 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"); |