authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2023-07-12 20:26:31-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2023-07-18 19:02:06-07:00
log82db06fa673dabc640c4c954df0dee7a8a6d3bfc
treec28d71695ed6a02fe244f2f05a97d81dca917b48
parentd98526f912202c1eb82973ceeb096aa2ccf77832

InternPool: fix regression in getting error sets

Missing call to `addStringsToMap`.

1 files changed, 13 insertions(+), 5 deletions(-)

src/InternPool.zig+13-5
......@@ -57,7 +57,7 @@ unions_free_list: std.ArrayListUnmanaged(Module.Union.Index) = .{},
5757/// to field index, or value to field index. In such cases, they will store the underlying
5858/// field names and values directly, relying on one of these maps, stored separately,
5959/// to provide lookup.
60maps: std.ArrayListUnmanaged(std.AutoArrayHashMapUnmanaged(void, void)) = .{},
60maps: std.ArrayListUnmanaged(FieldMap) = .{},
6161
6262/// Used for finding the index inside `string_bytes`.
6363string_table: std.HashMapUnmanaged(
......@@ -67,6 +67,10 @@ string_table: std.HashMapUnmanaged(
6767 std.hash_map.default_max_load_percentage,
6868) = .{},
6969
70/// TODO: after https://github.com/ziglang/zig/issues/10618 is solved,
71/// change store_hash to false.
72const FieldMap = std.ArrayHashMapUnmanaged(void, void, std.array_hash_map.AutoContext(void), true);
73
7074const builtin = @import("builtin");
7175const std = @import("std");
7276const Allocator = std.mem.Allocator;
......@@ -301,7 +305,7 @@ pub const Key = union(enum) {
301305 const map = &ip.maps.items[@intFromEnum(self.names_map.unwrap().?)];
302306 const adapter: NullTerminatedString.Adapter = .{ .strings = self.names.get(ip) };
303307 const field_index = map.getIndexAdapted(name, adapter) orelse return null;
304 return @as(u32, @intCast(field_index));
308 return @intCast(field_index);
305309 }
306310 };
307311
......@@ -4627,9 +4631,11 @@ pub fn getErrorSetType(
46274631 const prev_extra_len = ip.extra.items.len;
46284632 errdefer ip.extra.items.len = prev_extra_len;
46294633
4634 const predicted_names_map: MapIndex = @enumFromInt(ip.maps.items.len);
4635
46304636 const error_set_extra_index = ip.addExtraAssumeCapacity(Tag.ErrorSet{
46314637 .names_len = @intCast(names.len),
4632 .names_map = @enumFromInt(ip.maps.items.len),
4638 .names_map = predicted_names_map,
46334639 });
46344640 ip.extra.appendSliceAssumeCapacity(@ptrCast(names));
46354641
......@@ -4650,8 +4656,10 @@ pub fn getErrorSetType(
46504656 });
46514657 errdefer ip.items.len -= 1;
46524658
4653 _ = try ip.addMap(gpa);
4654 errdefer @compileError("don't");
4659 const names_map = try ip.addMap(gpa);
4660 errdefer _ = ip.maps.pop();
4661
4662 try addStringsToMap(ip, gpa, names_map, names);
46554663
46564664 return @enumFromInt(ip.items.len - 1);
46574665}