| ... | ... | @@ -9880,7 +9880,7 @@ pub fn printUnbuffered( |
| 9880 | 9880 | .none, .tuple, .expression, .constant => unreachable, |
| 9881 | 9881 | .file => { |
| 9882 | 9882 | const extra = self.metadataExtraData(Metadata.File, metadata_item.data); |
| 9883 | | try metadata_formatter.specialized(.@"distinct !", .DIFile, .{ |
| 9883 | try metadata_formatter.specialized(.@"!", .DIFile, .{ |
| 9884 | 9884 | .filename = extra.filename, |
| 9885 | 9885 | .directory = extra.directory, |
| 9886 | 9886 | .checksumkind = null, |
| ... | ... | @@ -9978,7 +9978,7 @@ pub fn printUnbuffered( |
| 9978 | 9978 | .basic_float_type, |
| 9979 | 9979 | => |kind| { |
| 9980 | 9980 | const extra = self.metadataExtraData(Metadata.BasicType, metadata_item.data); |
| 9981 | | try metadata_formatter.specialized(.@"distinct !", .DIBasicType, .{ |
| 9981 | try metadata_formatter.specialized(.@"!", .DIBasicType, .{ |
| 9982 | 9982 | .tag = null, |
| 9983 | 9983 | .name = switch (extra.name) { |
| 9984 | 9984 | .none => null, |
| ... | ... | @@ -10008,7 +10008,7 @@ pub fn printUnbuffered( |
| 10008 | 10008 | .composite_vector_type, |
| 10009 | 10009 | => |kind| { |
| 10010 | 10010 | const extra = self.metadataExtraData(Metadata.CompositeType, metadata_item.data); |
| 10011 | | try metadata_formatter.specialized(.@"distinct !", .DICompositeType, .{ |
| 10011 | try metadata_formatter.specialized(.@"!", .DICompositeType, .{ |
| 10012 | 10012 | .tag = @as(enum { |
| 10013 | 10013 | DW_TAG_structure_type, |
| 10014 | 10014 | DW_TAG_union_type, |
| ... | ... | @@ -10050,7 +10050,7 @@ pub fn printUnbuffered( |
| 10050 | 10050 | .derived_member_type, |
| 10051 | 10051 | => |kind| { |
| 10052 | 10052 | const extra = self.metadataExtraData(Metadata.DerivedType, metadata_item.data); |
| 10053 | | try metadata_formatter.specialized(.@"distinct !", .DIDerivedType, .{ |
| 10053 | try metadata_formatter.specialized(.@"!", .DIDerivedType, .{ |
| 10054 | 10054 | .tag = @as(enum { |
| 10055 | 10055 | DW_TAG_pointer_type, |
| 10056 | 10056 | DW_TAG_member, |
| ... | ... | @@ -10081,7 +10081,7 @@ pub fn printUnbuffered( |
| 10081 | 10081 | }, |
| 10082 | 10082 | .subroutine_type => { |
| 10083 | 10083 | const extra = self.metadataExtraData(Metadata.SubroutineType, metadata_item.data); |
| 10084 | | try metadata_formatter.specialized(.@"distinct !", .DISubroutineType, .{ |
| 10084 | try metadata_formatter.specialized(.@"!", .DISubroutineType, .{ |
| 10085 | 10085 | .flags = null, |
| 10086 | 10086 | .cc = null, |
| 10087 | 10087 | .types = extra.types_tuple, |
| ... | ... | @@ -10120,7 +10120,7 @@ pub fn printUnbuffered( |
| 10120 | 10120 | const str = try bigint.toStringAlloc(allocator, 10, undefined); |
| 10121 | 10121 | defer allocator.free(str); |
| 10122 | 10122 | |
| 10123 | | try metadata_formatter.specialized(.@"distinct !", .DIEnumerator, .{ |
| 10123 | try metadata_formatter.specialized(.@"!", .DIEnumerator, .{ |
| 10124 | 10124 | .name = extra.name, |
| 10125 | 10125 | .value = str, |
| 10126 | 10126 | .isUnsigned = switch (kind) { |
| ... | ... | @@ -10149,7 +10149,7 @@ pub fn printUnbuffered( |
| 10149 | 10149 | }, |
| 10150 | 10150 | .local_var => { |
| 10151 | 10151 | const extra = self.metadataExtraData(Metadata.LocalVar, metadata_item.data); |
| 10152 | | try metadata_formatter.specialized(.@"distinct !", .DILocalVariable, .{ |
| 10152 | try metadata_formatter.specialized(.@"!", .DILocalVariable, .{ |
| 10153 | 10153 | .name = extra.name, |
| 10154 | 10154 | .arg = null, |
| 10155 | 10155 | .scope = extra.scope, |
| ... | ... | @@ -10163,7 +10163,7 @@ pub fn printUnbuffered( |
| 10163 | 10163 | }, |
| 10164 | 10164 | .parameter => { |
| 10165 | 10165 | const extra = self.metadataExtraData(Metadata.Parameter, metadata_item.data); |
| 10166 | | try metadata_formatter.specialized(.@"distinct !", .DILocalVariable, .{ |
| 10166 | try metadata_formatter.specialized(.@"!", .DILocalVariable, .{ |
| 10167 | 10167 | .name = extra.name, |
| 10168 | 10168 | .arg = extra.arg_no, |
| 10169 | 10169 | .scope = extra.scope, |
| ... | ... | @@ -10201,7 +10201,7 @@ pub fn printUnbuffered( |
| 10201 | 10201 | .global_var_expression => { |
| 10202 | 10202 | const extra = |
| 10203 | 10203 | self.metadataExtraData(Metadata.GlobalVarExpression, metadata_item.data); |
| 10204 | | try metadata_formatter.specialized(.@"distinct !", .DIGlobalVariableExpression, .{ |
| 10204 | try metadata_formatter.specialized(.@"!", .DIGlobalVariableExpression, .{ |
| 10205 | 10205 | .@"var" = extra.variable, |
| 10206 | 10206 | .expr = extra.expression, |
| 10207 | 10207 | }, writer); |
| ... | ... | @@ -12623,17 +12623,35 @@ fn debugEnumeratorAssumeCapacity( |
| 12623 | 12623 | value: std.math.big.int.Const, |
| 12624 | 12624 | ) Metadata { |
| 12625 | 12625 | assert(!self.strip); |
| 12626 | | const Key = struct { tag: Metadata.Tag, index: Metadata }; |
| 12626 | const Key = struct { |
| 12627 | tag: Metadata.Tag, |
| 12628 | name: MetadataString, |
| 12629 | bit_width: u32, |
| 12630 | value: std.math.big.int.Const, |
| 12631 | }; |
| 12627 | 12632 | const Adapter = struct { |
| 12633 | builder: *const Builder, |
| 12628 | 12634 | pub fn hash(_: @This(), key: Key) u32 { |
| 12629 | | return @truncate(std.hash.Wyhash.hash( |
| 12630 | | std.hash.uint32(@intFromEnum(key.tag)), |
| 12631 | | std.mem.asBytes(&key.index), |
| 12632 | | )); |
| 12635 | var hasher = std.hash.Wyhash.init(std.hash.uint32(@intFromEnum(key.tag))); |
| 12636 | hasher.update(std.mem.asBytes(&key.name)); |
| 12637 | hasher.update(std.mem.asBytes(&key.bit_width)); |
| 12638 | hasher.update(std.mem.sliceAsBytes(key.value.limbs)); |
| 12639 | return @truncate(hasher.final()); |
| 12633 | 12640 | } |
| 12634 | 12641 | |
| 12635 | | pub fn eql(_: @This(), lhs_key: Key, _: void, rhs_index: usize) bool { |
| 12636 | | return @intFromEnum(lhs_key.index) == rhs_index; |
| 12642 | pub fn eql(ctx: @This(), lhs_key: Key, _: void, rhs_index: usize) bool { |
| 12643 | if (lhs_key.tag != ctx.builder.metadata_items.items(.tag)[rhs_index]) return false; |
| 12644 | const rhs_data = ctx.builder.metadata_items.items(.data)[rhs_index]; |
| 12645 | const rhs_extra = ctx.builder.metadataExtraData(Metadata.Enumerator, rhs_data); |
| 12646 | const limbs = ctx.builder.metadata_limbs |
| 12647 | .items[rhs_extra.limbs_index..][0..rhs_extra.limbs_len]; |
| 12648 | const rhs_value = std.math.big.int.Const{ |
| 12649 | .limbs = limbs, |
| 12650 | .positive = lhs_key.value.positive, |
| 12651 | }; |
| 12652 | return lhs_key.name == rhs_extra.name and |
| 12653 | lhs_key.bit_width == rhs_extra.bit_width and |
| 12654 | lhs_key.value.eql(rhs_value); |
| 12637 | 12655 | } |
| 12638 | 12656 | }; |
| 12639 | 12657 | |
| ... | ... | @@ -12647,8 +12665,13 @@ fn debugEnumeratorAssumeCapacity( |
| 12647 | 12665 | assert(!(tag == .enumerator_unsigned and !value.positive)); |
| 12648 | 12666 | |
| 12649 | 12667 | const gop = self.metadata_map.getOrPutAssumeCapacityAdapted( |
| 12650 | | Key{ .tag = tag, .index = @enumFromInt(self.metadata_map.count()) }, |
| 12651 | | Adapter{}, |
| 12668 | Key{ |
| 12669 | .tag = tag, |
| 12670 | .name = name, |
| 12671 | .bit_width = bit_width, |
| 12672 | .value = value, |
| 12673 | }, |
| 12674 | Adapter{ .builder = self }, |
| 12652 | 12675 | ); |
| 12653 | 12676 | |
| 12654 | 12677 | if (!gop.found_existing) { |