Commit d0edaabf9d

Veikka Tuominen <git@vexu.eu>
2022-12-01 10:49:06
Value: fix elemValueAdvanced for optional payloads
Closes #13707
1 parent 98037a0
Changed files (2)
src
test
behavior
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);
+        }
+    }
+}