| ... | @@ -2082,14 +2082,14 @@ fn createNewDecl( | ... | @@ -2082,14 +2082,14 @@ fn createNewDecl( |
| 2082 | | 2082 | |
| 2083 | /// Get error value for error tag `name`. | 2083 | /// Get error value for error tag `name`. |
| 2084 | pub fn getErrorValue(self: *Module, name: []const u8) !std.StringHashMapUnmanaged(u16).Entry { | 2084 | pub fn getErrorValue(self: *Module, name: []const u8) !std.StringHashMapUnmanaged(u16).Entry { |
| 2085 | const new_val = @intCast(u16, self.global_error_set.items().len); | 2085 | const gop = try self.global_error_set.getOrPut(self.gpa, name); |
| 2086 | if (self.global_error_set.getEntry(name)) |some| return some.*; | 2086 | if (gop.found_existing) |
| 2087 | | 2087 | return gop.entry.*; |
| 2088 | const duped = try self.gpa.dupe(u8, name); | 2088 | errdefer self.global_error_set.removeAssertDiscard(name); |
| 2089 | errdefer self.gpa.free(duped); | 2089 | |
| 2090 | | 2090 | gop.entry.key = try self.gpa.dupe(u8, name); |
| 2091 | try self.global_error_set.put(self.gpa, duped, new_val); | 2091 | gop.entry.value = @intCast(u16, self.global_error_set.items().len - 1); |
| 2092 | return self.global_error_set.getEntry(duped).?.*; | 2092 | return gop.entry.*; |
| 2093 | } | 2093 | } |
| 2094 | | 2094 | |
| 2095 | /// TODO split this into `requireRuntimeBlock` and `requireFunctionBlock` and audit callsites. | 2095 | /// TODO split this into `requireRuntimeBlock` and `requireFunctionBlock` and audit callsites. |