Update to new hashmap api

This commit is contained in:
Robin Voetter
2020-07-06 01:22:49 +02:00
parent 29de177c05
commit a0e3b31fd9

View File

@@ -47,10 +47,10 @@ const DeclarationResolver = struct {
}; };
} }
fn deinit(self: DeclarationResolver) void { fn deinit(self: *DeclarationResolver) void {
var it = self.enum_extensions.iterator(); var it = self.enum_extensions.iterator();
while (it.next()) |kv| { while (it.next()) |entry| {
kv.value.deinit(); entry.value.deinit();
} }
self.field_set.deinit(); self.field_set.deinit();
@@ -61,10 +61,10 @@ const DeclarationResolver = struct {
fn putEnumExtension(self: *DeclarationResolver, enum_name: []const u8, field: reg.Enum.Field) !void { fn putEnumExtension(self: *DeclarationResolver, enum_name: []const u8, field: reg.Enum.Field) !void {
const res = try self.enum_extensions.getOrPut(enum_name); const res = try self.enum_extensions.getOrPut(enum_name);
if (!res.found_existing) { if (!res.found_existing) {
res.kv.value = std.ArrayList(reg.Enum.Field).init(self.gpa); res.entry.value = std.ArrayList(reg.Enum.Field).init(self.gpa);
} }
try res.kv.value.append(field); try res.entry.value.append(field);
} }
fn addRequire(self: *DeclarationResolver, req: reg.Require) !void { fn addRequire(self: *DeclarationResolver, req: reg.Require) !void {
@@ -85,24 +85,24 @@ const DeclarationResolver = struct {
// If there are no extensions for this enum, assume its valid. // If there are no extensions for this enum, assume its valid.
const extensions = self.enum_extensions.get(name) orelse return; const extensions = self.enum_extensions.get(name) orelse return;
self.field_set.clear(); self.field_set.clearRetainingCapacity();
const n_fields_upper_bound = base_enum.fields.len + extensions.value.items.len; const n_fields_upper_bound = base_enum.fields.len + extensions.items.len;
const new_fields = try self.reg_arena.alloc(reg.Enum.Field, n_fields_upper_bound); const new_fields = try self.reg_arena.alloc(reg.Enum.Field, n_fields_upper_bound);
var i: usize = 0; var i: usize = 0;
for (base_enum.fields) |field| { for (base_enum.fields) |field| {
const existing = try self.field_set.put(field.name, {}); const res = try self.field_set.getOrPut(field.name);
if (existing == null) { if (!res.found_existing) {
new_fields[i] = field; new_fields[i] = field;
i += 1; i += 1;
} }
} }
// Assume that if a field name clobbers, the value is the same // Assume that if a field name clobbers, the value is the same
for (extensions.value.items) |field| { for (extensions.items) |field| {
const existing = try self.field_set.put(field.name, {}); const res = try self.field_set.getOrPut(field.name);
if (existing == null) { if (!res.found_existing) {
new_fields[i] = field; new_fields[i] = field;
i += 1; i += 1;
} }
@@ -172,7 +172,7 @@ const TagFixerUpper = struct {
}; };
} }
fn deinit(self: TagFixerUpper) void { fn deinit(self: *TagFixerUpper) void {
self.names.deinit(); self.names.deinit();
} }
@@ -183,12 +183,12 @@ const TagFixerUpper = struct {
if (result.found_existing) { if (result.found_existing) {
if (is_tagged) { if (is_tagged) {
result.kv.value.tagged_name = name; result.entry.value.tagged_name = name;
} else { } else {
result.kv.value.tagless_name_exists = true; result.entry.value.tagless_name_exists = true;
} }
} else { } else {
result.kv.value = .{ result.entry.value = .{
.tagged_name = if (is_tagged) name else null, .tagged_name = if (is_tagged) name else null,
.tagless_name_exists = !is_tagged, .tagless_name_exists = !is_tagged,
}; };
@@ -212,7 +212,7 @@ const TagFixerUpper = struct {
fn fixName(self: *TagFixerUpper, name: *[]const u8) !void { fn fixName(self: *TagFixerUpper, name: *[]const u8) !void {
const tagless = util.stripAuthorTag(name.*, self.registry.tags); const tagless = util.stripAuthorTag(name.*, self.registry.tags);
const info = self.names.getValue(tagless) orelse return error.InvalidRegistry; const info = self.names.get(tagless) orelse return error.InvalidRegistry;
if (info.tagless_name_exists) { if (info.tagless_name_exists) {
name.* = tagless; name.* = tagless;
} else if (info.tagged_name) |tagged| { } else if (info.tagged_name) |tagged| {