aboutsummaryrefslogtreecommitdiff
path: root/src/InternPool.zig
diff options
context:
space:
mode:
authormlugg <mlugg@mlugg.co.uk>2024-03-05 13:12:28 +0000
committermlugg <mlugg@mlugg.co.uk>2024-03-06 21:26:38 +0000
commit4c05a9a892d68749f3d7da26ee0e884158640720 (patch)
tree0fca45e4c519f04b7904d5004cc9a42c097ee489 /src/InternPool.zig
parente1d8187028ec6df7fbf420d3e4b56da8bf3dcf0a (diff)
downloadzig-4c05a9a892d68749f3d7da26ee0e884158640720.tar.gz
zig-4c05a9a892d68749f3d7da26ee0e884158640720.zip
Sema: do not destroy enum type if field analysis fails
Diffstat (limited to 'src/InternPool.zig')
-rw-r--r--src/InternPool.zig23
1 files changed, 5 insertions, 18 deletions
diff --git a/src/InternPool.zig b/src/InternPool.zig
index 6639603cb5..6a82abedce 100644
--- a/src/InternPool.zig
+++ b/src/InternPool.zig
@@ -6810,17 +6810,13 @@ pub const WipEnumType = struct {
names_start: u32,
values_map: OptionalMapIndex,
values_start: u32,
- expected_fields_len: if (std.debug.runtime_safety) u32 else void,
pub fn prepare(
wip: WipEnumType,
ip: *InternPool,
decl: DeclIndex,
namespace: OptionalNamespaceIndex,
- tag_ty: Index,
) void {
- assert(ip.isIntegerType(tag_ty));
- ip.extra.items[wip.tag_ty_index] = @intFromEnum(tag_ty);
ip.extra.items[wip.decl_index] = @intFromEnum(decl);
if (wip.namespace_index) |i| {
ip.extra.items[i] = @intFromEnum(namespace.unwrap().?);
@@ -6829,6 +6825,11 @@ pub const WipEnumType = struct {
}
}
+ pub fn setTagTy(wip: WipEnumType, ip: *InternPool, tag_ty: Index) void {
+ assert(ip.isIntegerType(tag_ty));
+ ip.extra.items[wip.tag_ty_index] = @intFromEnum(tag_ty);
+ }
+
pub const FieldConflict = struct {
kind: enum { name, value },
prev_field_idx: u32,
@@ -6858,18 +6859,6 @@ pub const WipEnumType = struct {
return null;
}
- pub fn finish(wip: WipEnumType, ip: *InternPool) Index {
- if (std.debug.runtime_safety) {
- const names_map = &ip.maps.items[@intFromEnum(wip.names_map)];
- assert(names_map.count() == wip.expected_fields_len);
- if (wip.values_map.unwrap()) |v| {
- const values_map = &ip.maps.items[@intFromEnum(v)];
- assert(values_map.count() == wip.expected_fields_len);
- }
- }
- return wip.index;
- }
-
pub fn cancel(wip: WipEnumType, ip: *InternPool) void {
ip.remove(wip.index);
}
@@ -6951,7 +6940,6 @@ pub fn getEnumType(
.names_start = @intCast(names_start),
.values_map = .none,
.values_start = undefined,
- .expected_fields_len = if (std.debug.runtime_safety) ini.fields_len else {},
} };
},
.explicit, .nonexhaustive => {
@@ -7016,7 +7004,6 @@ pub fn getEnumType(
.names_start = @intCast(names_start),
.values_map = values_map,
.values_start = @intCast(values_start),
- .expected_fields_len = if (std.debug.runtime_safety) ini.fields_len else {},
} };
},
}