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) = .{},...@@ -57,7 +57,7 @@ unions_free_list: std.ArrayListUnmanaged(Module.Union.Index) = .{},
57/// to field index, or value to field index. In such cases, they will store the underlying57/// to field index, or value to field index. In such cases, they will store the underlying
58/// field names and values directly, relying on one of these maps, stored separately,58/// field names and values directly, relying on one of these maps, stored separately,
59/// to provide lookup.59/// to provide lookup.
60maps: std.ArrayListUnmanaged(std.AutoArrayHashMapUnmanaged(void, void)) = .{},60maps: std.ArrayListUnmanaged(FieldMap) = .{},
6161
62/// Used for finding the index inside `string_bytes`.62/// Used for finding the index inside `string_bytes`.
63string_table: std.HashMapUnmanaged(63string_table: std.HashMapUnmanaged(
...@@ -67,6 +67,10 @@ string_table: std.HashMapUnmanaged(...@@ -67,6 +67,10 @@ string_table: std.HashMapUnmanaged(
67 std.hash_map.default_max_load_percentage,67 std.hash_map.default_max_load_percentage,
68) = .{},68) = .{},
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
70const builtin = @import("builtin");74const builtin = @import("builtin");
71const std = @import("std");75const std = @import("std");
72const Allocator = std.mem.Allocator;76const Allocator = std.mem.Allocator;
...@@ -301,7 +305,7 @@ pub const Key = union(enum) {...@@ -301,7 +305,7 @@ pub const Key = union(enum) {
301 const map = &ip.maps.items[@intFromEnum(self.names_map.unwrap().?)];305 const map = &ip.maps.items[@intFromEnum(self.names_map.unwrap().?)];
302 const adapter: NullTerminatedString.Adapter = .{ .strings = self.names.get(ip) };306 const adapter: NullTerminatedString.Adapter = .{ .strings = self.names.get(ip) };
303 const field_index = map.getIndexAdapted(name, adapter) orelse return null;307 const field_index = map.getIndexAdapted(name, adapter) orelse return null;
304 return @as(u32, @intCast(field_index));308 return @intCast(field_index);
305 }309 }
306 };310 };
307311
...@@ -4627,9 +4631,11 @@ pub fn getErrorSetType(...@@ -4627,9 +4631,11 @@ pub fn getErrorSetType(
4627 const prev_extra_len = ip.extra.items.len;4631 const prev_extra_len = ip.extra.items.len;
4628 errdefer ip.extra.items.len = prev_extra_len;4632 errdefer ip.extra.items.len = prev_extra_len;
46294633
4634 const predicted_names_map: MapIndex = @enumFromInt(ip.maps.items.len);
4635
4630 const error_set_extra_index = ip.addExtraAssumeCapacity(Tag.ErrorSet{4636 const error_set_extra_index = ip.addExtraAssumeCapacity(Tag.ErrorSet{
4631 .names_len = @intCast(names.len),4637 .names_len = @intCast(names.len),
4632 .names_map = @enumFromInt(ip.maps.items.len),4638 .names_map = predicted_names_map,
4633 });4639 });
4634 ip.extra.appendSliceAssumeCapacity(@ptrCast(names));4640 ip.extra.appendSliceAssumeCapacity(@ptrCast(names));
46354641
...@@ -4650,8 +4656,10 @@ pub fn getErrorSetType(...@@ -4650,8 +4656,10 @@ pub fn getErrorSetType(
4650 });4656 });
4651 errdefer ip.items.len -= 1;4657 errdefer ip.items.len -= 1;
46524658
4653 _ = try ip.addMap(gpa);4659 const names_map = try ip.addMap(gpa);
4654 errdefer @compileError("don't");4660 errdefer _ = ip.maps.pop();
4661
4662 try addStringsToMap(ip, gpa, names_map, names);
46554663
4656 return @enumFromInt(ip.items.len - 1);4664 return @enumFromInt(ip.items.len - 1);
4657}4665}