Value: fix elemValueAdvanced for optional payloads

Closes #13707
This commit is contained in:
Veikka Tuominen 2022-12-01 11:49:06 +02:00
parent 98037a0238
commit d0edaabf9d
2 changed files with 28 additions and 0 deletions

View File

@ -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,
}
}

View File

@ -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);
}
}
}