aboutsummaryrefslogtreecommitdiff
path: root/lib/std/builtin.zig
diff options
context:
space:
mode:
authorr00ster91 <r00ster91@proton.me>2023-02-21 18:39:22 +0100
committerAndrew Kelley <andrew@ziglang.org>2023-06-17 13:17:34 -0700
commit6e84f469904a24615a6721265a88ad8dcb4ed83a (patch)
treed390e7738b996686749adbbd9a1c18f647058b3b /lib/std/builtin.zig
parent96acc204b2c6080f0169ca3721c3b95a433c185b (diff)
downloadzig-6e84f469904a24615a6721265a88ad8dcb4ed83a.tar.gz
zig-6e84f469904a24615a6721265a88ad8dcb4ed83a.zip
std: replace builtin.Version with SemanticVersion
Diffstat (limited to 'lib/std/builtin.zig')
-rw-r--r--lib/std/builtin.zig133
1 files changed, 0 insertions, 133 deletions
diff --git a/lib/std/builtin.zig b/lib/std/builtin.zig
index b449080e86..54781e4465 100644
--- a/lib/std/builtin.zig
+++ b/lib/std/builtin.zig
@@ -485,139 +485,6 @@ pub const WasiExecModel = enum {
/// This data structure is used by the Zig language code generation and
/// therefore must be kept in sync with the compiler implementation.
-pub const Version = struct {
- major: u32,
- minor: u32,
- patch: u32 = 0,
-
- pub const Range = struct {
- min: Version,
- max: Version,
-
- pub fn includesVersion(self: Range, ver: Version) bool {
- if (self.min.order(ver) == .gt) return false;
- if (self.max.order(ver) == .lt) return false;
- return true;
- }
-
- /// Checks if system is guaranteed to be at least `version` or older than `version`.
- /// Returns `null` if a runtime check is required.
- pub fn isAtLeast(self: Range, ver: Version) ?bool {
- if (self.min.order(ver) != .lt) return true;
- if (self.max.order(ver) == .lt) return false;
- return null;
- }
- };
-
- pub fn order(lhs: Version, rhs: Version) std.math.Order {
- if (lhs.major < rhs.major) return .lt;
- if (lhs.major > rhs.major) return .gt;
- if (lhs.minor < rhs.minor) return .lt;
- if (lhs.minor > rhs.minor) return .gt;
- if (lhs.patch < rhs.patch) return .lt;
- if (lhs.patch > rhs.patch) return .gt;
- return .eq;
- }
-
- pub fn parse(text: []const u8) !Version {
- var end: usize = 0;
- while (end < text.len) : (end += 1) {
- const c = text[end];
- if (!std.ascii.isDigit(c) and c != '.') break;
- }
- // found no digits or '.' before unexpected character
- if (end == 0) return error.InvalidVersion;
-
- var it = std.mem.splitScalar(u8, text[0..end], '.');
- // substring is not empty, first call will succeed
- const major = it.first();
- if (major.len == 0) return error.InvalidVersion;
- const minor = it.next() orelse "0";
- // ignore 'patch' if 'minor' is invalid
- const patch = if (minor.len == 0) "0" else (it.next() orelse "0");
-
- return Version{
- .major = try std.fmt.parseUnsigned(u32, major, 10),
- .minor = try std.fmt.parseUnsigned(u32, if (minor.len == 0) "0" else minor, 10),
- .patch = try std.fmt.parseUnsigned(u32, if (patch.len == 0) "0" else patch, 10),
- };
- }
-
- pub fn format(
- self: Version,
- comptime fmt: []const u8,
- options: std.fmt.FormatOptions,
- out_stream: anytype,
- ) !void {
- _ = options;
- if (fmt.len == 0) {
- if (self.patch == 0) {
- if (self.minor == 0) {
- return std.fmt.format(out_stream, "{d}", .{self.major});
- } else {
- return std.fmt.format(out_stream, "{d}.{d}", .{ self.major, self.minor });
- }
- } else {
- return std.fmt.format(out_stream, "{d}.{d}.{d}", .{ self.major, self.minor, self.patch });
- }
- } else {
- std.fmt.invalidFmtError(fmt, self);
- }
- }
-};
-
-test "Version.parse" {
- @setEvalBranchQuota(3000);
- try testVersionParse();
- comptime (try testVersionParse());
-}
-
-fn testVersionParse() !void {
- const f = struct {
- fn eql(text: []const u8, v1: u32, v2: u32, v3: u32) !void {
- const v = try Version.parse(text);
- try std.testing.expect(v.major == v1 and v.minor == v2 and v.patch == v3);
- }
-
- fn err(text: []const u8, expected_err: anyerror) !void {
- _ = Version.parse(text) catch |actual_err| {
- if (actual_err == expected_err) return;
- return actual_err;
- };
- return error.Unreachable;
- }
- };
-
- try f.eql("2.6.32.11-svn21605", 2, 6, 32); // Debian PPC
- try f.eql("2.11.2(0.329/5/3)", 2, 11, 2); // MinGW
- try f.eql("5.4.0-1018-raspi", 5, 4, 0); // Ubuntu
- try f.eql("5.7.12_3", 5, 7, 12); // Void
- try f.eql("2.13-DEVELOPMENT", 2, 13, 0); // DragonFly
- try f.eql("2.3-35", 2, 3, 0);
- try f.eql("1a.4", 1, 0, 0);
- try f.eql("3.b1.0", 3, 0, 0);
- try f.eql("1.4beta", 1, 4, 0);
- try f.eql("2.7.pre", 2, 7, 0);
- try f.eql("0..3", 0, 0, 0);
- try f.eql("8.008.", 8, 8, 0);
- try f.eql("01...", 1, 0, 0);
- try f.eql("55", 55, 0, 0);
- try f.eql("4294967295.0.1", 4294967295, 0, 1);
- try f.eql("429496729_6", 429496729, 0, 0);
-
- try f.err("foobar", error.InvalidVersion);
- try f.err("", error.InvalidVersion);
- try f.err("-1", error.InvalidVersion);
- try f.err("+4", error.InvalidVersion);
- try f.err(".", error.InvalidVersion);
- try f.err("....3", error.InvalidVersion);
- try f.err("4294967296", error.Overflow);
- try f.err("5000877755", error.Overflow);
- // error.InvalidCharacter is not possible anymore
-}
-
-/// This data structure is used by the Zig language code generation and
-/// therefore must be kept in sync with the compiler implementation.
pub const CallModifier = enum {
/// Equivalent to function call syntax.
auto,