Commit d0edaabf9d
src/value.zig
@@ -2895,6 +2895,12 @@ pub const Value = extern union {
return val;
},
+ .opt_payload_ptr => return val.castTag(.opt_payload_ptr).?.data.container_ptr.elemValueAdvanced(mod, index, arena, buffer),
+ .eu_payload_ptr => return val.castTag(.eu_payload_ptr).?.data.container_ptr.elemValueAdvanced(mod, index, arena, buffer),
+
+ .opt_payload => return val.castTag(.opt_payload).?.data.elemValueAdvanced(mod, index, arena, buffer),
+ .eu_payload => return val.castTag(.eu_payload).?.data.elemValueAdvanced(mod, index, arena, buffer),
+
else => unreachable,
}
}
test/behavior/type.zig
@@ -535,3 +535,25 @@ test "Type.Fn" {
try std.testing.expectEqual(T, fn_type);
}
}
+
+test "reified struct field name from optional payload" {
+ comptime {
+ const m_name: ?[1]u8 = "a".*;
+ if (m_name) |*name| {
+ const T = @Type(.{ .Struct = .{
+ .layout = .Auto,
+ .fields = &.{.{
+ .name = name,
+ .field_type = u8,
+ .default_value = null,
+ .is_comptime = false,
+ .alignment = 1,
+ }},
+ .decls = &.{},
+ .is_tuple = false,
+ } });
+ var t: T = .{ .a = 123 };
+ try std.testing.expect(t.a == 123);
+ }
+ }
+}