| ... | ... | @@ -2853,7 +2853,7 @@ pub fn indexToKey(ip: *const InternPool, index: Index) Key { |
| 2853 | 2853 | .error_set_type = .anyerror_type, |
| 2854 | 2854 | .payload_type = @enumFromInt(data), |
| 2855 | 2855 | } }, |
| 2856 | | .type_error_set => ip.indexToKeyErrorSetType(data), |
| 2856 | .type_error_set => .{ .error_set_type = ip.extraErrorSet(data) }, |
| 2857 | 2857 | .type_inferred_error_set => .{ |
| 2858 | 2858 | .inferred_error_set_type = @enumFromInt(data), |
| 2859 | 2859 | }, |
| ... | ... | @@ -3284,15 +3284,15 @@ pub fn indexToKey(ip: *const InternPool, index: Index) Key { |
| 3284 | 3284 | }; |
| 3285 | 3285 | } |
| 3286 | 3286 | |
| 3287 | | fn indexToKeyErrorSetType(ip: *const InternPool, data: u32) Key { |
| 3288 | | const error_set = ip.extraDataTrail(Tag.ErrorSet, data); |
| 3289 | | return .{ .error_set_type = .{ |
| 3287 | fn extraErrorSet(ip: *const InternPool, extra_index: u32) Key.ErrorSetType { |
| 3288 | const error_set = ip.extraDataTrail(Tag.ErrorSet, extra_index); |
| 3289 | return .{ |
| 3290 | 3290 | .names = .{ |
| 3291 | 3291 | .start = @intCast(error_set.end), |
| 3292 | 3292 | .len = error_set.data.names_len, |
| 3293 | 3293 | }, |
| 3294 | 3294 | .names_map = error_set.data.names_map.toOptional(), |
| 3295 | | } }; |
| 3295 | }; |
| 3296 | 3296 | } |
| 3297 | 3297 | |
| 3298 | 3298 | fn extraFuncType(ip: *const InternPool, extra_index: u32) Key.FuncType { |
| ... | ... | @@ -3342,7 +3342,7 @@ fn extraFuncDecl(ip: *const InternPool, extra_index: u32) Key.Func { |
| 3342 | 3342 | .lbrace_line = func_decl.data.lbrace_line, |
| 3343 | 3343 | .rbrace_line = func_decl.data.rbrace_line, |
| 3344 | 3344 | .lbrace_column = func_decl.data.lbrace_column, |
| 3345 | | .rbrace_column = func_decl.data.lbrace_column, |
| 3345 | .rbrace_column = func_decl.data.rbrace_column, |
| 3346 | 3346 | .generic_owner = .none, |
| 3347 | 3347 | .comptime_args = .{ .start = 0, .len = 0 }, |
| 3348 | 3348 | }; |
| ... | ... | @@ -3363,7 +3363,7 @@ fn extraFuncInstance(ip: *const InternPool, extra_index: u32) Key.Func { |
| 3363 | 3363 | .lbrace_line = func_decl.lbrace_line, |
| 3364 | 3364 | .rbrace_line = func_decl.rbrace_line, |
| 3365 | 3365 | .lbrace_column = func_decl.lbrace_column, |
| 3366 | | .rbrace_column = func_decl.lbrace_column, |
| 3366 | .rbrace_column = func_decl.rbrace_column, |
| 3367 | 3367 | .generic_owner = fi.data.generic_owner, |
| 3368 | 3368 | .comptime_args = .{ |
| 3369 | 3369 | .start = fi.end + @intFromBool(fi.data.analysis.inferred_error_set), |
| ... | ... | @@ -4521,7 +4521,7 @@ pub fn getFuncDeclIes(ip: *InternPool, gpa: Allocator, key: GetFuncDeclIesKey) A |
| 4521 | 4521 | .inferred_error_set = true, |
| 4522 | 4522 | }, |
| 4523 | 4523 | .owner_decl = key.owner_decl, |
| 4524 | | .ty = @enumFromInt(ip.items.len + 1), |
| 4524 | .ty = @enumFromInt(ip.items.len + 3), |
| 4525 | 4525 | .zir_body_inst = key.zir_body_inst, |
| 4526 | 4526 | .lbrace_line = key.lbrace_line, |
| 4527 | 4527 | .rbrace_line = key.rbrace_line, |
| ... | ... | @@ -4608,35 +4608,38 @@ pub fn getErrorSetType( |
| 4608 | 4608 | // The strategy here is to add the type unconditionally, then to ask if it |
| 4609 | 4609 | // already exists, and if so, revert the lengths of the mutated arrays. |
| 4610 | 4610 | // This is similar to what `getOrPutTrailingString` does. |
| 4611 | | const prev_extra_len = ip.extra.items.len; |
| 4612 | | |
| 4613 | 4611 | try ip.extra.ensureUnusedCapacity(gpa, @typeInfo(Tag.ErrorSet).Struct.fields.len + names.len); |
| 4614 | | try ip.items.ensureUnusedCapacity(gpa, 1); |
| 4615 | 4612 | |
| 4616 | | ip.items.appendAssumeCapacity(.{ |
| 4617 | | .tag = .type_error_set, |
| 4618 | | .data = ip.addExtraAssumeCapacity(Tag.ErrorSet{ |
| 4619 | | .names_len = @intCast(names.len), |
| 4620 | | .names_map = @enumFromInt(ip.maps.items.len), |
| 4621 | | }), |
| 4613 | const prev_extra_len = ip.extra.items.len; |
| 4614 | errdefer ip.extra.items.len = prev_extra_len; |
| 4615 | |
| 4616 | const error_set_extra_index = ip.addExtraAssumeCapacity(Tag.ErrorSet{ |
| 4617 | .names_len = @intCast(names.len), |
| 4618 | .names_map = @enumFromInt(ip.maps.items.len), |
| 4622 | 4619 | }); |
| 4623 | 4620 | ip.extra.appendSliceAssumeCapacity(@ptrCast(names)); |
| 4624 | 4621 | |
| 4625 | 4622 | const adapter: KeyAdapter = .{ .intern_pool = ip }; |
| 4626 | | const key = indexToKeyErrorSetType(ip, @intCast(ip.items.len - 1)); |
| 4627 | | const gop = try ip.map.getOrPutAdapted(gpa, key, adapter); |
| 4628 | | if (!gop.found_existing) { |
| 4629 | | _ = ip.addMap(gpa) catch { |
| 4630 | | ip.items.len -= 1; |
| 4631 | | ip.extra.items.len = prev_extra_len; |
| 4632 | | }; |
| 4633 | | return @enumFromInt(ip.items.len - 1); |
| 4623 | const gop = try ip.map.getOrPutAdapted(gpa, Key{ |
| 4624 | .error_set_type = extraErrorSet(ip, error_set_extra_index), |
| 4625 | }, adapter); |
| 4626 | errdefer _ = ip.map.pop(); |
| 4627 | |
| 4628 | if (gop.found_existing) { |
| 4629 | ip.extra.items.len = prev_extra_len; |
| 4630 | return @enumFromInt(gop.index); |
| 4634 | 4631 | } |
| 4635 | 4632 | |
| 4636 | | // An existing function type was found; undo the additions to our two arrays. |
| 4637 | | ip.items.len -= 1; |
| 4638 | | ip.extra.items.len = prev_extra_len; |
| 4639 | | return @enumFromInt(gop.index); |
| 4633 | try ip.items.append(gpa, .{ |
| 4634 | .tag = .type_error_set, |
| 4635 | .data = error_set_extra_index, |
| 4636 | }); |
| 4637 | errdefer ip.items.len -= 1; |
| 4638 | |
| 4639 | _ = try ip.addMap(gpa); |
| 4640 | errdefer @compileError("don't"); |
| 4641 | |
| 4642 | return @enumFromInt(ip.items.len - 1); |
| 4640 | 4643 | } |
| 4641 | 4644 | |
| 4642 | 4645 | pub const GetFuncInstanceKey = struct { |