From bb956f2cf60cf5983309a22f1f88facda0a04a16 Mon Sep 17 00:00:00 2001 From: Meghan Denny Date: Wed, 3 Jun 2026 21:56:52 -0700 Subject: [PATCH] update to zig 0.16.0 --- README.md | 2 +- src/FieldUnion.zig | 23 +++++++++-------------- src/FlippedInt.zig | 14 ++++++++------ src/LoggingReader.zig | 2 +- src/LoggingWriter.zig | 2 +- src/OneBiggerInt.zig | 5 ++--- src/OneSmallerInt.zig | 5 ++--- src/Partial.zig | 26 +++++++++----------------- src/ReverseFields.zig | 11 ++++++----- src/StructOfArrays.zig | 21 +++++---------------- src/StructOfSlices.zig | 21 +++++---------------- src/join.zig | 14 +++++--------- src/omit.zig | 16 +++++++++++++--- 13 files changed, 67 insertions(+), 95 deletions(-) diff --git a/README.md b/README.md index 2e230ed2b2cc1bddc7de1b53ceeca56c1fc465d0..ad96caf58f27343300a9cfd126a797fe9b757b1b 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ ![loc](https://sloc.xyz/github/nektro/zig-extras) [![license](https://img.shields.io/github/license/nektro/zig-extras.svg)](https://github.com/nektro/zig-extras/blob/master/LICENSE) [![nektro @ github sponsors](https://img.shields.io/badge/sponsors-nektro-purple?logo=github)](https://github.com/sponsors/nektro) -[![Zig](https://img.shields.io/badge/Zig-0.15-f7a41d)](https://ziglang.org/) +[![Zig](https://img.shields.io/badge/Zig-0.16-f7a41d)](https://ziglang.org/) [![Zigmod](https://img.shields.io/badge/Zigmod-latest-f7a41d)](https://github.com/nektro/zigmod) An assortment of random utility functions that aren't in std and don't deserve their own package. diff --git a/src/FieldUnion.zig b/src/FieldUnion.zig index 95b47458f8176c1ca796063cf50733e212fa9cfd..294227438aeb23978020f78f4c627d02d020d8fe 100644 --- a/src/FieldUnion.zig +++ b/src/FieldUnion.zig @@ -4,22 +4,17 @@ const extras = @import("./lib.zig"); const expectSimilarType = extras.expectSimilarType; pub fn FieldUnion(comptime T: type) type { - const infos = std.meta.fields(T); + const fields = std.meta.fields(T); + var names: [fields.fields.len][]const u8 = undefined; + var types: [fields.fields.len]type = undefined; + var attrs: [fields.fields.len]std.builtin.Type.UnionField.Attributes = undefined; - var fields: [infos.len]std.builtin.Type.UnionField = undefined; - inline for (infos, 0..) |field, i| { - fields[i] = .{ - .name = field.name, - .type = field.type, - .alignment = field.alignment, - }; + inline for (fields, 0..) |field, i| { + names[i] = field.name; + types[i] = field.type; + attrs[i] = .{ .@"align" = field.alignment }; } - return @Type(std.builtin.Type{ .@"union" = .{ - .layout = .auto, - .tag_type = std.meta.FieldEnum(T), - .fields = &fields, - .decls = &.{}, - } }); + return @Union(.auto, std.meta.FieldEnum(T), &names, &types, &attrs); } test { diff --git a/src/FlippedInt.zig b/src/FlippedInt.zig index b802da581cbe07d178f2715fc981fa0124485bff..cbd0c2787c3570bce3e15ef23308615586c7134a 100644 --- a/src/FlippedInt.zig +++ b/src/FlippedInt.zig @@ -3,12 +3,14 @@ const string = []const u8; const extras = @import("./lib.zig"); pub fn FlippedInt(comptime T: type) type { - var info = @typeInfo(T); - info.int.signedness = switch (info.int.signedness) { - .signed => .unsigned, - .unsigned => .signed, - }; - return @Type(info); + const info = @typeInfo(T).int; + return @Int( + switch (info.signedness) { + .signed => .unsigned, + .unsigned => .signed, + }, + info.signedness, + ); } test { diff --git a/src/LoggingReader.zig b/src/LoggingReader.zig index 5376c16c1a341c0edaa5a9713ce8895e2b52f760..75e4b975c5f69e4ad3bfd76918ed20d8312579b3 100644 --- a/src/LoggingReader.zig +++ b/src/LoggingReader.zig @@ -2,7 +2,7 @@ const std = @import("std"); const string = []const u8; const extras = @import("./lib.zig"); -pub fn LoggingReader(comptime T: type, comptime scope: @Type(.EnumLiteral)) type { +pub fn LoggingReader(comptime T: type, comptime scope: @EnumLiteral()) type { return struct { child_stream: T, diff --git a/src/LoggingWriter.zig b/src/LoggingWriter.zig index 2146e289f998b2bd9e3805c2811e4ed416d6bc9a..ff8a75a66ec81debccb1081bd70bc20666728377 100644 --- a/src/LoggingWriter.zig +++ b/src/LoggingWriter.zig @@ -2,7 +2,7 @@ const std = @import("std"); const string = []const u8; const extras = @import("./lib.zig"); -pub fn LoggingWriter(comptime T: type, comptime scope: @Type(.EnumLiteral)) type { +pub fn LoggingWriter(comptime T: type, comptime scope: @EnumLiteral()) type { return struct { child_stream: T, diff --git a/src/OneBiggerInt.zig b/src/OneBiggerInt.zig index 556e2eb6091b99d723b0c89d1e89966bfc4ffa6d..a769cc44395e87223e8a2ecf3ee27af63c8bff3e 100644 --- a/src/OneBiggerInt.zig +++ b/src/OneBiggerInt.zig @@ -3,9 +3,8 @@ const string = []const u8; const extras = @import("./lib.zig"); pub fn OneBiggerInt(comptime T: type) type { - var info = @typeInfo(T); - info.int.bits += 1; - return @Type(info); + const info = @typeInfo(T).int; + return @Int(info.signedness, info.bits + 1); } test { diff --git a/src/OneSmallerInt.zig b/src/OneSmallerInt.zig index 87618a5a68d02c684a26fc25c34c41c23a9755bd..861c090f985f3df5c502c111debbf39bd3856983 100644 --- a/src/OneSmallerInt.zig +++ b/src/OneSmallerInt.zig @@ -3,9 +3,8 @@ const string = []const u8; const extras = @import("./lib.zig"); pub fn OneSmallerInt(comptime T: type) type { - var info = @typeInfo(T); - info.int.bits -= 1; - return @Type(info); + const info = @typeInfo(T).int; + return @Int(info.signedness, info.bits - 1); } test { diff --git a/src/Partial.zig b/src/Partial.zig index a75060d8f0f0c4d796fa345c36213c0726412e5d..a372a1add9d2122aec3f28e7c21581ecf83ddae2 100644 --- a/src/Partial.zig +++ b/src/Partial.zig @@ -6,24 +6,16 @@ const expectSimilarType = extras.expectSimilarType; /// Creates a new version of struct T where all fields are optional. /// Name inspried by https://www.typescriptlang.org/docs/handbook/utility-types.html#partialtype. pub fn Partial(comptime T: type) type { - const fields_before = std.meta.fields(T); - var fields_after: [fields_before.len]std.builtin.Type.StructField = undefined; - inline for (fields_before, 0..) |item, i| { - fields_after[i] = std.builtin.Type.StructField{ - .name = item.name, - .type = ?item.type, - .default_value_ptr = &@as(?item.type, null), - .is_comptime = false, - .alignment = @alignOf(?item.type), - }; + const fields = std.meta.fields(T); + var names: [fields.len][]const u8 = undefined; + var types: [fields.len]type = undefined; + var attrs: [fields.len]std.builtin.Type.StructField.Attributes = undefined; + for (fields, 0..) |item, i| { + names[i] = item.name; + types[i] = ?item.type; + attrs[i] = .{ .default_value_ptr = &@as(?item.type, null) }; } - return @Type(@unionInit(std.builtin.Type, "struct", .{ - .layout = .auto, - .backing_integer = null, - .fields = &fields_after, - .decls = &.{}, - .is_tuple = false, - })); + return @Struct(.auto, null, &names, &types, &attrs); } test { diff --git a/src/ReverseFields.zig b/src/ReverseFields.zig index 5b259297021422612eb86164d92baf02550f1ba7..5b7ab877b3578aca4c30227c94de5cecf5277a82 100644 --- a/src/ReverseFields.zig +++ b/src/ReverseFields.zig @@ -4,14 +4,15 @@ const extras = @import("./lib.zig"); const expectSimilarType = extras.expectSimilarType; pub fn ReverseFields(comptime T: type) type { - var info = @typeInfo(T).@"struct"; + const info = @typeInfo(T).@"struct"; const len = info.fields.len; - var fields: [len]std.builtin.Type.StructField = undefined; + var names: [len][]const u8 = undefined; + var types: [len]type = undefined; for (0..len) |i| { - fields[i] = info.fields[len - 1 - i]; + names[i] = info.fields[len - 1 - i].name; + types[i] = info.fields[len - 1 - i].type; } - info.fields = &fields; - return @Type(.{ .@"struct" = info }); + return @Struct(.auto, null, &names, &types, &@splat(.{})); } test { diff --git a/src/StructOfArrays.zig b/src/StructOfArrays.zig index c479433ad70ef2ad228ccd23df21e59b3e0e888f..02d5204f7e8186441a21fdf5c4681a3050d12ab5 100644 --- a/src/StructOfArrays.zig +++ b/src/StructOfArrays.zig @@ -6,24 +6,13 @@ const expectSimilarType = extras.expectSimilarType; pub fn StructOfArrays(len: usize, T: type) type { const info = @typeInfo(T).@"struct"; const fields = info.fields; - var new_fields: [fields.len]std.builtin.Type.StructField = undefined; + var names: [fields.len][]const u8 = undefined; + var types: [fields.len]type = undefined; for (fields, 0..) |item, i| { - new_fields[i] = .{ - .name = item.name, - .type = [len]item.type, - .default_value_ptr = null, - .is_comptime = false, - .alignment = @alignOf([len]item.type), - }; + names[i] = item.name; + types[i] = [len]item.type; } - const result = new_fields[0..fields.len]; - return @Type(@unionInit(std.builtin.Type, "struct", .{ - .layout = .auto, - .backing_integer = null, - .fields = result, - .decls = &.{}, - .is_tuple = info.is_tuple, - })); + return @Struct(.auto, null, &names, &types, &@splat(.{})); } test { diff --git a/src/StructOfSlices.zig b/src/StructOfSlices.zig index daf46fa4ac3bf7aafb0fcb31d98ded44e6825147..79c41db7937c757bfc7c7272ecfa0226f92d4df9 100644 --- a/src/StructOfSlices.zig +++ b/src/StructOfSlices.zig @@ -6,24 +6,13 @@ const expectSimilarType = extras.expectSimilarType; pub fn StructOfSlices(T: type) type { const info = @typeInfo(T).@"struct"; const fields = info.fields; - var new_fields: [fields.len]std.builtin.Type.StructField = undefined; + var names: [fields.len][]const u8 = undefined; + var types: [fields.len]type = undefined; for (fields, 0..) |item, i| { - new_fields[i] = .{ - .name = item.name, - .type = []const item.type, - .default_value_ptr = null, - .is_comptime = false, - .alignment = @alignOf([]const item.type), - }; + names[i] = item.name; + types[i] = []const item.type; } - const result = new_fields[0..fields.len]; - return @Type(@unionInit(std.builtin.Type, "struct", .{ - .layout = .auto, - .backing_integer = null, - .fields = result, - .decls = &.{}, - .is_tuple = info.is_tuple, - })); + return @Struct(.auto, null, &names, &types, &@splat(.{})); } test { diff --git a/src/join.zig b/src/join.zig index 831c8a8647c0db3801a0e79e282d8485e88df4f2..3513401229a94e137ffe4f861689d2cb4fee8eb0 100644 --- a/src/join.zig +++ b/src/join.zig @@ -14,17 +14,13 @@ pub fn join(input: anytype) Join(@TypeOf(input)) { } pub fn Join(comptime T: type) type { - var fields: []const std.builtin.Type.StructField = &.{}; + var names: [][]const u8 = &.{}; + var types: []type = &.{}; inline for (std.meta.fields(T)) |item| { inline for (std.meta.fields(item.type)) |f| { - fields = fields ++ &[_]std.builtin.Type.StructField{.{ - .name = f.name, - .type = f.type, - .default_value_ptr = null, - .is_comptime = false, - .alignment = @alignOf(f.type), - }}; + names = names ++ &[_][]const u8{f.name}; + types = types ++ &[_]type{f.type}; } } - return @Type(.{ .@"struct" = .{ .layout = .auto, .fields = fields, .decls = &.{}, .is_tuple = false } }); + return @Struct(.auto, null, &names, &types, &@splat(.{})); } diff --git a/src/omit.zig b/src/omit.zig index 07656dfa224d8ed06e65406b71eddca9cc50a564..c7318e2dc4920065825720d36774b8cba23b72c4 100644 --- a/src/omit.zig +++ b/src/omit.zig @@ -14,12 +14,22 @@ pub fn omit(value: anytype, comptime field_name: []const u8) Omit(@TypeOf(value) pub fn Omit(T: type, field_name: []const u8) type { const fields_original = std.meta.fields(T); - var fields: [fields_original.len - 1]std.builtin.Type.StructField = undefined; + const len = fields_original.len - 1; + var names: [len][]const u8 = undefined; + var types: [len]type = undefined; + var attrs: [len]std.builtin.Type.StructField.Attributes = undefined; var i: usize = 0; for (fields_original) |f| { if (std.mem.eql(u8, f.name, field_name)) continue; - fields[i] = f; + names[i] = f.name; + types[i] = f.type; + attrs[i] = .{ + .@"comptime" = f.is_comptime, + .@"align" = f.alignment, + .default_value_ptr = f.default_value_ptr, + }; i += 1; } - return @Type(.{ .@"struct" = .{ .layout = .auto, .fields = &fields, .decls = &.{}, .is_tuple = false } }); + return @Struct(.auto, null, &names, &types, &attrs); + // return @Type(.{ .@"struct" = .{ .layout = .auto, .fields = &fields, .decls = &.{}, .is_tuple = false } }); } -- 2.54.0