authorgravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2022-12-01 11:49:06+02:00
committergravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2022-12-01 11:49:06+02:00
logd0edaabf9d5fd4a8a8e43aef38d8970781dd1c86
treedfae257fa21ba3489fb623b15ad425f2b5a3a427
parent98037a02384cdd9fa9c71210fb35d24b82e61f36

Value: fix elemValueAdvanced for optional payloads

Closes #13707

2 files changed, 28 insertions(+), 0 deletions(-)

src/value.zig+6
...@@ -2895,6 +2895,12 @@ pub const Value = extern union {...@@ -2895,6 +2895,12 @@ pub const Value = extern union {
2895 return val;2895 return val;
2896 },2896 },
28972897
2898 .opt_payload_ptr => return val.castTag(.opt_payload_ptr).?.data.container_ptr.elemValueAdvanced(mod, index, arena, buffer),
2899 .eu_payload_ptr => return val.castTag(.eu_payload_ptr).?.data.container_ptr.elemValueAdvanced(mod, index, arena, buffer),
2900
2901 .opt_payload => return val.castTag(.opt_payload).?.data.elemValueAdvanced(mod, index, arena, buffer),
2902 .eu_payload => return val.castTag(.eu_payload).?.data.elemValueAdvanced(mod, index, arena, buffer),
2903
2898 else => unreachable,2904 else => unreachable,
2899 }2905 }
2900 }2906 }
test/behavior/type.zig+22
...@@ -535,3 +535,25 @@ test "Type.Fn" {...@@ -535,3 +535,25 @@ test "Type.Fn" {
535 try std.testing.expectEqual(T, fn_type);535 try std.testing.expectEqual(T, fn_type);
536 }536 }
537}537}
538
539test "reified struct field name from optional payload" {
540 comptime {
541 const m_name: ?[1]u8 = "a".*;
542 if (m_name) |*name| {
543 const T = @Type(.{ .Struct = .{
544 .layout = .Auto,
545 .fields = &.{.{
546 .name = name,
547 .field_type = u8,
548 .default_value = null,
549 .is_comptime = false,
550 .alignment = 1,
551 }},
552 .decls = &.{},
553 .is_tuple = false,
554 } });
555 var t: T = .{ .a = 123 };
556 try std.testing.expect(t.a == 123);
557 }
558 }
559}