| ... | @@ -3249,6 +3249,9 @@ pub const LoadedUnionType = struct { | ... | @@ -3249,6 +3249,9 @@ pub const LoadedUnionType = struct { |
| 3249 | name: NullTerminatedString, | 3249 | name: NullTerminatedString, |
| 3250 | /// Represents the declarations inside this union. | 3250 | /// Represents the declarations inside this union. |
| 3251 | namespace: NamespaceIndex, | 3251 | namespace: NamespaceIndex, |
| | 3252 | /// If this is a declared type with the `.parent` name strategy, this is the `Nav` it was named after. |
| | 3253 | /// Otherwise, this is `.none`. |
| | 3254 | name_nav: Nav.Index.Optional, |
| 3252 | /// The enum tag type. | 3255 | /// The enum tag type. |
| 3253 | enum_tag_ty: Index, | 3256 | enum_tag_ty: Index, |
| 3254 | /// List of field types in declaration order. | 3257 | /// List of field types in declaration order. |
| ... | @@ -3567,6 +3570,7 @@ pub fn loadUnionType(ip: *const InternPool, index: Index) LoadedUnionType { | ... | @@ -3567,6 +3570,7 @@ pub fn loadUnionType(ip: *const InternPool, index: Index) LoadedUnionType { |
| 3567 | .tid = unwrapped_index.tid, | 3570 | .tid = unwrapped_index.tid, |
| 3568 | .extra_index = data, | 3571 | .extra_index = data, |
| 3569 | .name = type_union.data.name, | 3572 | .name = type_union.data.name, |
| | 3573 | .name_nav = type_union.data.name_nav, |
| 3570 | .namespace = type_union.data.namespace, | 3574 | .namespace = type_union.data.namespace, |
| 3571 | .enum_tag_ty = type_union.data.tag_ty, | 3575 | .enum_tag_ty = type_union.data.tag_ty, |
| 3572 | .field_types = field_types, | 3576 | .field_types = field_types, |
| ... | @@ -3584,6 +3588,9 @@ pub const LoadedStructType = struct { | ... | @@ -3584,6 +3588,9 @@ pub const LoadedStructType = struct { |
| 3584 | /// The name of this struct type. | 3588 | /// The name of this struct type. |
| 3585 | name: NullTerminatedString, | 3589 | name: NullTerminatedString, |
| 3586 | namespace: NamespaceIndex, | 3590 | namespace: NamespaceIndex, |
| | 3591 | /// If this is a declared type with the `.parent` name strategy, this is the `Nav` it was named after. |
| | 3592 | /// Otherwise, or if this is a file's root struct type, this is `.none`. |
| | 3593 | name_nav: Nav.Index.Optional, |
| 3587 | /// Index of the `struct_decl` or `reify` ZIR instruction. | 3594 | /// Index of the `struct_decl` or `reify` ZIR instruction. |
| 3588 | zir_index: TrackedInst.Index, | 3595 | zir_index: TrackedInst.Index, |
| 3589 | layout: std.builtin.Type.ContainerLayout, | 3596 | layout: std.builtin.Type.ContainerLayout, |
| ... | @@ -4173,6 +4180,7 @@ pub fn loadStructType(ip: *const InternPool, index: Index) LoadedStructType { | ... | @@ -4173,6 +4180,7 @@ pub fn loadStructType(ip: *const InternPool, index: Index) LoadedStructType { |
| 4173 | switch (item.tag) { | 4180 | switch (item.tag) { |
| 4174 | .type_struct => { | 4181 | .type_struct => { |
| 4175 | const name: NullTerminatedString = @enumFromInt(extra_items[item.data + std.meta.fieldIndex(Tag.TypeStruct, "name").?]); | 4182 | const name: NullTerminatedString = @enumFromInt(extra_items[item.data + std.meta.fieldIndex(Tag.TypeStruct, "name").?]); |
| | 4183 | const name_nav: Nav.Index.Optional = @enumFromInt(extra_items[item.data + std.meta.fieldIndex(Tag.TypeStruct, "name_nav").?]); |
| 4176 | const namespace: NamespaceIndex = @enumFromInt(extra_items[item.data + std.meta.fieldIndex(Tag.TypeStruct, "namespace").?]); | 4184 | const namespace: NamespaceIndex = @enumFromInt(extra_items[item.data + std.meta.fieldIndex(Tag.TypeStruct, "namespace").?]); |
| 4177 | const zir_index: TrackedInst.Index = @enumFromInt(extra_items[item.data + std.meta.fieldIndex(Tag.TypeStruct, "zir_index").?]); | 4185 | const zir_index: TrackedInst.Index = @enumFromInt(extra_items[item.data + std.meta.fieldIndex(Tag.TypeStruct, "zir_index").?]); |
| 4178 | const fields_len = extra_items[item.data + std.meta.fieldIndex(Tag.TypeStruct, "fields_len").?]; | 4186 | const fields_len = extra_items[item.data + std.meta.fieldIndex(Tag.TypeStruct, "fields_len").?]; |
| ... | @@ -4259,6 +4267,7 @@ pub fn loadStructType(ip: *const InternPool, index: Index) LoadedStructType { | ... | @@ -4259,6 +4267,7 @@ pub fn loadStructType(ip: *const InternPool, index: Index) LoadedStructType { |
| 4259 | .tid = unwrapped_index.tid, | 4267 | .tid = unwrapped_index.tid, |
| 4260 | .extra_index = item.data, | 4268 | .extra_index = item.data, |
| 4261 | .name = name, | 4269 | .name = name, |
| | 4270 | .name_nav = name_nav, |
| 4262 | .namespace = namespace, | 4271 | .namespace = namespace, |
| 4263 | .zir_index = zir_index, | 4272 | .zir_index = zir_index, |
| 4264 | .layout = if (flags.is_extern) .@"extern" else .auto, | 4273 | .layout = if (flags.is_extern) .@"extern" else .auto, |
| ... | @@ -4275,6 +4284,7 @@ pub fn loadStructType(ip: *const InternPool, index: Index) LoadedStructType { | ... | @@ -4275,6 +4284,7 @@ pub fn loadStructType(ip: *const InternPool, index: Index) LoadedStructType { |
| 4275 | }, | 4284 | }, |
| 4276 | .type_struct_packed, .type_struct_packed_inits => { | 4285 | .type_struct_packed, .type_struct_packed_inits => { |
| 4277 | const name: NullTerminatedString = @enumFromInt(extra_items[item.data + std.meta.fieldIndex(Tag.TypeStructPacked, "name").?]); | 4286 | const name: NullTerminatedString = @enumFromInt(extra_items[item.data + std.meta.fieldIndex(Tag.TypeStructPacked, "name").?]); |
| | 4287 | const name_nav: Nav.Index.Optional = @enumFromInt(extra_items[item.data + std.meta.fieldIndex(Tag.TypeStructPacked, "name_nav").?]); |
| 4278 | const zir_index: TrackedInst.Index = @enumFromInt(extra_items[item.data + std.meta.fieldIndex(Tag.TypeStructPacked, "zir_index").?]); | 4288 | const zir_index: TrackedInst.Index = @enumFromInt(extra_items[item.data + std.meta.fieldIndex(Tag.TypeStructPacked, "zir_index").?]); |
| 4279 | const fields_len = extra_items[item.data + std.meta.fieldIndex(Tag.TypeStructPacked, "fields_len").?]; | 4289 | const fields_len = extra_items[item.data + std.meta.fieldIndex(Tag.TypeStructPacked, "fields_len").?]; |
| 4280 | const namespace: NamespaceIndex = @enumFromInt(extra_items[item.data + std.meta.fieldIndex(Tag.TypeStructPacked, "namespace").?]); | 4290 | const namespace: NamespaceIndex = @enumFromInt(extra_items[item.data + std.meta.fieldIndex(Tag.TypeStructPacked, "namespace").?]); |
| ... | @@ -4321,6 +4331,7 @@ pub fn loadStructType(ip: *const InternPool, index: Index) LoadedStructType { | ... | @@ -4321,6 +4331,7 @@ pub fn loadStructType(ip: *const InternPool, index: Index) LoadedStructType { |
| 4321 | .tid = unwrapped_index.tid, | 4331 | .tid = unwrapped_index.tid, |
| 4322 | .extra_index = item.data, | 4332 | .extra_index = item.data, |
| 4323 | .name = name, | 4333 | .name = name, |
| | 4334 | .name_nav = name_nav, |
| 4324 | .namespace = namespace, | 4335 | .namespace = namespace, |
| 4325 | .zir_index = zir_index, | 4336 | .zir_index = zir_index, |
| 4326 | .layout = .@"packed", | 4337 | .layout = .@"packed", |
| ... | @@ -4345,6 +4356,9 @@ pub const LoadedEnumType = struct { | ... | @@ -4345,6 +4356,9 @@ pub const LoadedEnumType = struct { |
| 4345 | name: NullTerminatedString, | 4356 | name: NullTerminatedString, |
| 4346 | /// Represents the declarations inside this enum. | 4357 | /// Represents the declarations inside this enum. |
| 4347 | namespace: NamespaceIndex, | 4358 | namespace: NamespaceIndex, |
| | 4359 | /// If this is a declared type with the `.parent` name strategy, this is the `Nav` it was named after. |
| | 4360 | /// Otherwise, this is `.none`. |
| | 4361 | name_nav: Nav.Index.Optional, |
| 4348 | /// An integer type which is used for the numerical value of the enum. | 4362 | /// An integer type which is used for the numerical value of the enum. |
| 4349 | /// This field is present regardless of whether the enum has an | 4363 | /// This field is present regardless of whether the enum has an |
| 4350 | /// explicitly provided tag type or auto-numbered. | 4364 | /// explicitly provided tag type or auto-numbered. |
| ... | @@ -4428,6 +4442,7 @@ pub fn loadEnumType(ip: *const InternPool, index: Index) LoadedEnumType { | ... | @@ -4428,6 +4442,7 @@ pub fn loadEnumType(ip: *const InternPool, index: Index) LoadedEnumType { |
| 4428 | } else extra.data.captures_len; | 4442 | } else extra.data.captures_len; |
| 4429 | return .{ | 4443 | return .{ |
| 4430 | .name = extra.data.name, | 4444 | .name = extra.data.name, |
| | 4445 | .name_nav = extra.data.name_nav, |
| 4431 | .namespace = extra.data.namespace, | 4446 | .namespace = extra.data.namespace, |
| 4432 | .tag_ty = extra.data.int_tag_type, | 4447 | .tag_ty = extra.data.int_tag_type, |
| 4433 | .names = .{ | 4448 | .names = .{ |
| ... | @@ -4462,6 +4477,7 @@ pub fn loadEnumType(ip: *const InternPool, index: Index) LoadedEnumType { | ... | @@ -4462,6 +4477,7 @@ pub fn loadEnumType(ip: *const InternPool, index: Index) LoadedEnumType { |
| 4462 | } else extra.data.captures_len; | 4477 | } else extra.data.captures_len; |
| 4463 | return .{ | 4478 | return .{ |
| 4464 | .name = extra.data.name, | 4479 | .name = extra.data.name, |
| | 4480 | .name_nav = extra.data.name_nav, |
| 4465 | .namespace = extra.data.namespace, | 4481 | .namespace = extra.data.namespace, |
| 4466 | .tag_ty = extra.data.int_tag_type, | 4482 | .tag_ty = extra.data.int_tag_type, |
| 4467 | .names = .{ | 4483 | .names = .{ |
| ... | @@ -4493,6 +4509,9 @@ pub const LoadedOpaqueType = struct { | ... | @@ -4493,6 +4509,9 @@ pub const LoadedOpaqueType = struct { |
| 4493 | // TODO: the non-fqn will be needed by the new dwarf structure | 4509 | // TODO: the non-fqn will be needed by the new dwarf structure |
| 4494 | /// The name of this opaque type. | 4510 | /// The name of this opaque type. |
| 4495 | name: NullTerminatedString, | 4511 | name: NullTerminatedString, |
| | 4512 | /// If this is a declared type with the `.parent` name strategy, this is the `Nav` it was named after. |
| | 4513 | /// Otherwise, this is `.none`. |
| | 4514 | name_nav: Nav.Index.Optional, |
| 4496 | /// Index of the `opaque_decl` or `reify` instruction. | 4515 | /// Index of the `opaque_decl` or `reify` instruction. |
| 4497 | zir_index: TrackedInst.Index, | 4516 | zir_index: TrackedInst.Index, |
| 4498 | captures: CaptureValue.Slice, | 4517 | captures: CaptureValue.Slice, |
| ... | @@ -4509,6 +4528,7 @@ pub fn loadOpaqueType(ip: *const InternPool, index: Index) LoadedOpaqueType { | ... | @@ -4509,6 +4528,7 @@ pub fn loadOpaqueType(ip: *const InternPool, index: Index) LoadedOpaqueType { |
| 4509 | extra.data.captures_len; | 4528 | extra.data.captures_len; |
| 4510 | return .{ | 4529 | return .{ |
| 4511 | .name = extra.data.name, | 4530 | .name = extra.data.name, |
| | 4531 | .name_nav = extra.data.name_nav, |
| 4512 | .namespace = extra.data.namespace, | 4532 | .namespace = extra.data.namespace, |
| 4513 | .zir_index = extra.data.zir_index, | 4533 | .zir_index = extra.data.zir_index, |
| 4514 | .captures = .{ | 4534 | .captures = .{ |
| ... | @@ -6022,6 +6042,7 @@ pub const Tag = enum(u8) { | ... | @@ -6022,6 +6042,7 @@ pub const Tag = enum(u8) { |
| 6022 | /// 4. field align: Alignment for each field; declaration order | 6042 | /// 4. field align: Alignment for each field; declaration order |
| 6023 | pub const TypeUnion = struct { | 6043 | pub const TypeUnion = struct { |
| 6024 | name: NullTerminatedString, | 6044 | name: NullTerminatedString, |
| | 6045 | name_nav: Nav.Index.Optional, |
| 6025 | flags: Flags, | 6046 | flags: Flags, |
| 6026 | /// This could be provided through the tag type, but it is more convenient | 6047 | /// This could be provided through the tag type, but it is more convenient |
| 6027 | /// to store it directly. This is also necessary for `dumpStatsFallible` to | 6048 | /// to store it directly. This is also necessary for `dumpStatsFallible` to |
| ... | @@ -6061,6 +6082,7 @@ pub const Tag = enum(u8) { | ... | @@ -6061,6 +6082,7 @@ pub const Tag = enum(u8) { |
| 6061 | /// 5. init: Index for each fields_len // if tag is type_struct_packed_inits | 6082 | /// 5. init: Index for each fields_len // if tag is type_struct_packed_inits |
| 6062 | pub const TypeStructPacked = struct { | 6083 | pub const TypeStructPacked = struct { |
| 6063 | name: NullTerminatedString, | 6084 | name: NullTerminatedString, |
| | 6085 | name_nav: Nav.Index.Optional, |
| 6064 | zir_index: TrackedInst.Index, | 6086 | zir_index: TrackedInst.Index, |
| 6065 | fields_len: u32, | 6087 | fields_len: u32, |
| 6066 | namespace: NamespaceIndex, | 6088 | namespace: NamespaceIndex, |
| ... | @@ -6108,6 +6130,7 @@ pub const Tag = enum(u8) { | ... | @@ -6108,6 +6130,7 @@ pub const Tag = enum(u8) { |
| 6108 | /// 8. field_offset: u32 // for each field in declared order, undef until layout_resolved | 6130 | /// 8. field_offset: u32 // for each field in declared order, undef until layout_resolved |
| 6109 | pub const TypeStruct = struct { | 6131 | pub const TypeStruct = struct { |
| 6110 | name: NullTerminatedString, | 6132 | name: NullTerminatedString, |
| | 6133 | name_nav: Nav.Index.Optional, |
| 6111 | zir_index: TrackedInst.Index, | 6134 | zir_index: TrackedInst.Index, |
| 6112 | namespace: NamespaceIndex, | 6135 | namespace: NamespaceIndex, |
| 6113 | fields_len: u32, | 6136 | fields_len: u32, |
| ... | @@ -6151,6 +6174,7 @@ pub const Tag = enum(u8) { | ... | @@ -6151,6 +6174,7 @@ pub const Tag = enum(u8) { |
| 6151 | /// 0. capture: CaptureValue // for each `captures_len` | 6174 | /// 0. capture: CaptureValue // for each `captures_len` |
| 6152 | pub const TypeOpaque = struct { | 6175 | pub const TypeOpaque = struct { |
| 6153 | name: NullTerminatedString, | 6176 | name: NullTerminatedString, |
| | 6177 | name_nav: Nav.Index.Optional, |
| 6154 | /// Contains the declarations inside this opaque. | 6178 | /// Contains the declarations inside this opaque. |
| 6155 | namespace: NamespaceIndex, | 6179 | namespace: NamespaceIndex, |
| 6156 | /// The index of the `opaque_decl` instruction. | 6180 | /// The index of the `opaque_decl` instruction. |
| ... | @@ -6429,6 +6453,7 @@ pub const Array = struct { | ... | @@ -6429,6 +6453,7 @@ pub const Array = struct { |
| 6429 | /// 4. tag value: Index for each fields_len; declaration order | 6453 | /// 4. tag value: Index for each fields_len; declaration order |
| 6430 | pub const EnumExplicit = struct { | 6454 | pub const EnumExplicit = struct { |
| 6431 | name: NullTerminatedString, | 6455 | name: NullTerminatedString, |
| | 6456 | name_nav: Nav.Index.Optional, |
| 6432 | /// `std.math.maxInt(u32)` indicates this type is reified. | 6457 | /// `std.math.maxInt(u32)` indicates this type is reified. |
| 6433 | captures_len: u32, | 6458 | captures_len: u32, |
| 6434 | namespace: NamespaceIndex, | 6459 | namespace: NamespaceIndex, |
| ... | @@ -6454,6 +6479,7 @@ pub const EnumExplicit = struct { | ... | @@ -6454,6 +6479,7 @@ pub const EnumExplicit = struct { |
| 6454 | /// 3. field name: NullTerminatedString for each fields_len; declaration order | 6479 | /// 3. field name: NullTerminatedString for each fields_len; declaration order |
| 6455 | pub const EnumAuto = struct { | 6480 | pub const EnumAuto = struct { |
| 6456 | name: NullTerminatedString, | 6481 | name: NullTerminatedString, |
| | 6482 | name_nav: Nav.Index.Optional, |
| 6457 | /// `std.math.maxInt(u32)` indicates this type is reified. | 6483 | /// `std.math.maxInt(u32)` indicates this type is reified. |
| 6458 | captures_len: u32, | 6484 | captures_len: u32, |
| 6459 | namespace: NamespaceIndex, | 6485 | namespace: NamespaceIndex, |
| ... | @@ -8666,6 +8692,7 @@ pub fn getUnionType( | ... | @@ -8666,6 +8692,7 @@ pub fn getUnionType( |
| 8666 | .size = std.math.maxInt(u32), | 8692 | .size = std.math.maxInt(u32), |
| 8667 | .padding = std.math.maxInt(u32), | 8693 | .padding = std.math.maxInt(u32), |
| 8668 | .name = undefined, // set by `finish` | 8694 | .name = undefined, // set by `finish` |
| | 8695 | .name_nav = undefined, // set by `finish` |
| 8669 | .namespace = undefined, // set by `finish` | 8696 | .namespace = undefined, // set by `finish` |
| 8670 | .tag_ty = ini.enum_tag_ty, | 8697 | .tag_ty = ini.enum_tag_ty, |
| 8671 | .zir_index = switch (ini.key) { | 8698 | .zir_index = switch (ini.key) { |
| ... | @@ -8717,6 +8744,7 @@ pub fn getUnionType( | ... | @@ -8717,6 +8744,7 @@ pub fn getUnionType( |
| 8717 | .tid = tid, | 8744 | .tid = tid, |
| 8718 | .index = gop.put(), | 8745 | .index = gop.put(), |
| 8719 | .type_name_extra_index = extra_index + std.meta.fieldIndex(Tag.TypeUnion, "name").?, | 8746 | .type_name_extra_index = extra_index + std.meta.fieldIndex(Tag.TypeUnion, "name").?, |
| | 8747 | .name_nav_extra_index = extra_index + std.meta.fieldIndex(Tag.TypeUnion, "name_nav").?, |
| 8720 | .namespace_extra_index = extra_index + std.meta.fieldIndex(Tag.TypeUnion, "namespace").?, | 8748 | .namespace_extra_index = extra_index + std.meta.fieldIndex(Tag.TypeUnion, "namespace").?, |
| 8721 | } }; | 8749 | } }; |
| 8722 | } | 8750 | } |
| ... | @@ -8726,15 +8754,20 @@ pub const WipNamespaceType = struct { | ... | @@ -8726,15 +8754,20 @@ pub const WipNamespaceType = struct { |
| 8726 | index: Index, | 8754 | index: Index, |
| 8727 | type_name_extra_index: u32, | 8755 | type_name_extra_index: u32, |
| 8728 | namespace_extra_index: u32, | 8756 | namespace_extra_index: u32, |
| | 8757 | name_nav_extra_index: u32, |
| 8729 | | 8758 | |
| 8730 | pub fn setName( | 8759 | pub fn setName( |
| 8731 | wip: WipNamespaceType, | 8760 | wip: WipNamespaceType, |
| 8732 | ip: *InternPool, | 8761 | ip: *InternPool, |
| 8733 | type_name: NullTerminatedString, | 8762 | type_name: NullTerminatedString, |
| | 8763 | /// This should be the `Nav` we are named after if we use the `.parent` name strategy; `.none` otherwise. |
| | 8764 | /// This is also `.none` if we use `.parent` because we are the root struct type for a file. |
| | 8765 | name_nav: Nav.Index.Optional, |
| 8734 | ) void { | 8766 | ) void { |
| 8735 | const extra = ip.getLocalShared(wip.tid).extra.acquire(); | 8767 | const extra = ip.getLocalShared(wip.tid).extra.acquire(); |
| 8736 | const extra_items = extra.view().items(.@"0"); | 8768 | const extra_items = extra.view().items(.@"0"); |
| 8737 | extra_items[wip.type_name_extra_index] = @intFromEnum(type_name); | 8769 | extra_items[wip.type_name_extra_index] = @intFromEnum(type_name); |
| | 8770 | extra_items[wip.name_nav_extra_index] = @intFromEnum(name_nav); |
| 8738 | } | 8771 | } |
| 8739 | | 8772 | |
| 8740 | pub fn finish( | 8773 | pub fn finish( |
| ... | @@ -8843,6 +8876,7 @@ pub fn getStructType( | ... | @@ -8843,6 +8876,7 @@ pub fn getStructType( |
| 8843 | ini.fields_len); // inits | 8876 | ini.fields_len); // inits |
| 8844 | const extra_index = addExtraAssumeCapacity(extra, Tag.TypeStructPacked{ | 8877 | const extra_index = addExtraAssumeCapacity(extra, Tag.TypeStructPacked{ |
| 8845 | .name = undefined, // set by `finish` | 8878 | .name = undefined, // set by `finish` |
| | 8879 | .name_nav = undefined, // set by `finish` |
| 8846 | .zir_index = zir_index, | 8880 | .zir_index = zir_index, |
| 8847 | .fields_len = ini.fields_len, | 8881 | .fields_len = ini.fields_len, |
| 8848 | .namespace = undefined, // set by `finish` | 8882 | .namespace = undefined, // set by `finish` |
| ... | @@ -8887,6 +8921,7 @@ pub fn getStructType( | ... | @@ -8887,6 +8921,7 @@ pub fn getStructType( |
| 8887 | .tid = tid, | 8921 | .tid = tid, |
| 8888 | .index = gop.put(), | 8922 | .index = gop.put(), |
| 8889 | .type_name_extra_index = extra_index + std.meta.fieldIndex(Tag.TypeStructPacked, "name").?, | 8923 | .type_name_extra_index = extra_index + std.meta.fieldIndex(Tag.TypeStructPacked, "name").?, |
| | 8924 | .name_nav_extra_index = extra_index + std.meta.fieldIndex(Tag.TypeStructPacked, "name_nav").?, |
| 8890 | .namespace_extra_index = extra_index + std.meta.fieldIndex(Tag.TypeStructPacked, "namespace").?, | 8925 | .namespace_extra_index = extra_index + std.meta.fieldIndex(Tag.TypeStructPacked, "namespace").?, |
| 8891 | } }; | 8926 | } }; |
| 8892 | }, | 8927 | }, |
| ... | @@ -8909,6 +8944,7 @@ pub fn getStructType( | ... | @@ -8909,6 +8944,7 @@ pub fn getStructType( |
| 8909 | 1); // names_map | 8944 | 1); // names_map |
| 8910 | const extra_index = addExtraAssumeCapacity(extra, Tag.TypeStruct{ | 8945 | const extra_index = addExtraAssumeCapacity(extra, Tag.TypeStruct{ |
| 8911 | .name = undefined, // set by `finish` | 8946 | .name = undefined, // set by `finish` |
| | 8947 | .name_nav = undefined, // set by `finish` |
| 8912 | .zir_index = zir_index, | 8948 | .zir_index = zir_index, |
| 8913 | .namespace = undefined, // set by `finish` | 8949 | .namespace = undefined, // set by `finish` |
| 8914 | .fields_len = ini.fields_len, | 8950 | .fields_len = ini.fields_len, |
| ... | @@ -8977,6 +9013,7 @@ pub fn getStructType( | ... | @@ -8977,6 +9013,7 @@ pub fn getStructType( |
| 8977 | .tid = tid, | 9013 | .tid = tid, |
| 8978 | .index = gop.put(), | 9014 | .index = gop.put(), |
| 8979 | .type_name_extra_index = extra_index + std.meta.fieldIndex(Tag.TypeStruct, "name").?, | 9015 | .type_name_extra_index = extra_index + std.meta.fieldIndex(Tag.TypeStruct, "name").?, |
| | 9016 | .name_nav_extra_index = extra_index + std.meta.fieldIndex(Tag.TypeStruct, "name_nav").?, |
| 8980 | .namespace_extra_index = extra_index + std.meta.fieldIndex(Tag.TypeStruct, "namespace").?, | 9017 | .namespace_extra_index = extra_index + std.meta.fieldIndex(Tag.TypeStruct, "namespace").?, |
| 8981 | } }; | 9018 | } }; |
| 8982 | } | 9019 | } |
| ... | @@ -9766,6 +9803,7 @@ pub const WipEnumType = struct { | ... | @@ -9766,6 +9803,7 @@ pub const WipEnumType = struct { |
| 9766 | tag_ty_index: u32, | 9803 | tag_ty_index: u32, |
| 9767 | type_name_extra_index: u32, | 9804 | type_name_extra_index: u32, |
| 9768 | namespace_extra_index: u32, | 9805 | namespace_extra_index: u32, |
| | 9806 | name_nav_extra_index: u32, |
| 9769 | names_map: MapIndex, | 9807 | names_map: MapIndex, |
| 9770 | names_start: u32, | 9808 | names_start: u32, |
| 9771 | values_map: OptionalMapIndex, | 9809 | values_map: OptionalMapIndex, |
| ... | @@ -9775,10 +9813,13 @@ pub const WipEnumType = struct { | ... | @@ -9775,10 +9813,13 @@ pub const WipEnumType = struct { |
| 9775 | wip: WipEnumType, | 9813 | wip: WipEnumType, |
| 9776 | ip: *InternPool, | 9814 | ip: *InternPool, |
| 9777 | type_name: NullTerminatedString, | 9815 | type_name: NullTerminatedString, |
| | 9816 | /// This should be the `Nav` we are named after if we use the `.parent` name strategy; `.none` otherwise. |
| | 9817 | name_nav: Nav.Index.Optional, |
| 9778 | ) void { | 9818 | ) void { |
| 9779 | const extra = ip.getLocalShared(wip.tid).extra.acquire(); | 9819 | const extra = ip.getLocalShared(wip.tid).extra.acquire(); |
| 9780 | const extra_items = extra.view().items(.@"0"); | 9820 | const extra_items = extra.view().items(.@"0"); |
| 9781 | extra_items[wip.type_name_extra_index] = @intFromEnum(type_name); | 9821 | extra_items[wip.type_name_extra_index] = @intFromEnum(type_name); |
| | 9822 | extra_items[wip.name_nav_extra_index] = @intFromEnum(name_nav); |
| 9782 | } | 9823 | } |
| 9783 | | 9824 | |
| 9784 | pub fn prepare( | 9825 | pub fn prepare( |
| ... | @@ -9893,6 +9934,7 @@ pub fn getEnumType( | ... | @@ -9893,6 +9934,7 @@ pub fn getEnumType( |
| 9893 | | 9934 | |
| 9894 | const extra_index = addExtraAssumeCapacity(extra, EnumAuto{ | 9935 | const extra_index = addExtraAssumeCapacity(extra, EnumAuto{ |
| 9895 | .name = undefined, // set by `prepare` | 9936 | .name = undefined, // set by `prepare` |
| | 9937 | .name_nav = undefined, // set by `prepare` |
| 9896 | .captures_len = switch (ini.key) { | 9938 | .captures_len = switch (ini.key) { |
| 9897 | inline .declared, .declared_owned_captures => |d| @intCast(d.captures.len), | 9939 | inline .declared, .declared_owned_captures => |d| @intCast(d.captures.len), |
| 9898 | .reified => std.math.maxInt(u32), | 9940 | .reified => std.math.maxInt(u32), |
| ... | @@ -9921,6 +9963,7 @@ pub fn getEnumType( | ... | @@ -9921,6 +9963,7 @@ pub fn getEnumType( |
| 9921 | .index = gop.put(), | 9963 | .index = gop.put(), |
| 9922 | .tag_ty_index = extra_index + std.meta.fieldIndex(EnumAuto, "int_tag_type").?, | 9964 | .tag_ty_index = extra_index + std.meta.fieldIndex(EnumAuto, "int_tag_type").?, |
| 9923 | .type_name_extra_index = extra_index + std.meta.fieldIndex(EnumAuto, "name").?, | 9965 | .type_name_extra_index = extra_index + std.meta.fieldIndex(EnumAuto, "name").?, |
| | 9966 | .name_nav_extra_index = extra_index + std.meta.fieldIndex(EnumAuto, "name_nav").?, |
| 9924 | .namespace_extra_index = extra_index + std.meta.fieldIndex(EnumAuto, "namespace").?, | 9967 | .namespace_extra_index = extra_index + std.meta.fieldIndex(EnumAuto, "namespace").?, |
| 9925 | .names_map = names_map, | 9968 | .names_map = names_map, |
| 9926 | .names_start = @intCast(names_start), | 9969 | .names_start = @intCast(names_start), |
| ... | @@ -9950,6 +9993,7 @@ pub fn getEnumType( | ... | @@ -9950,6 +9993,7 @@ pub fn getEnumType( |
| 9950 | | 9993 | |
| 9951 | const extra_index = addExtraAssumeCapacity(extra, EnumExplicit{ | 9994 | const extra_index = addExtraAssumeCapacity(extra, EnumExplicit{ |
| 9952 | .name = undefined, // set by `prepare` | 9995 | .name = undefined, // set by `prepare` |
| | 9996 | .name_nav = undefined, // set by `prepare` |
| 9953 | .captures_len = switch (ini.key) { | 9997 | .captures_len = switch (ini.key) { |
| 9954 | inline .declared, .declared_owned_captures => |d| @intCast(d.captures.len), | 9998 | inline .declared, .declared_owned_captures => |d| @intCast(d.captures.len), |
| 9955 | .reified => std.math.maxInt(u32), | 9999 | .reified => std.math.maxInt(u32), |
| ... | @@ -9987,6 +10031,7 @@ pub fn getEnumType( | ... | @@ -9987,6 +10031,7 @@ pub fn getEnumType( |
| 9987 | .index = gop.put(), | 10031 | .index = gop.put(), |
| 9988 | .tag_ty_index = extra_index + std.meta.fieldIndex(EnumExplicit, "int_tag_type").?, | 10032 | .tag_ty_index = extra_index + std.meta.fieldIndex(EnumExplicit, "int_tag_type").?, |
| 9989 | .type_name_extra_index = extra_index + std.meta.fieldIndex(EnumExplicit, "name").?, | 10033 | .type_name_extra_index = extra_index + std.meta.fieldIndex(EnumExplicit, "name").?, |
| | 10034 | .name_nav_extra_index = extra_index + std.meta.fieldIndex(EnumExplicit, "name_nav").?, |
| 9990 | .namespace_extra_index = extra_index + std.meta.fieldIndex(EnumExplicit, "namespace").?, | 10035 | .namespace_extra_index = extra_index + std.meta.fieldIndex(EnumExplicit, "namespace").?, |
| 9991 | .names_map = names_map, | 10036 | .names_map = names_map, |
| 9992 | .names_start = @intCast(names_start), | 10037 | .names_start = @intCast(names_start), |
| ... | @@ -10055,6 +10100,7 @@ pub fn getGeneratedTagEnumType( | ... | @@ -10055,6 +10100,7 @@ pub fn getGeneratedTagEnumType( |
| 10055 | .tag = .type_enum_auto, | 10100 | .tag = .type_enum_auto, |
| 10056 | .data = addExtraAssumeCapacity(extra, EnumAuto{ | 10101 | .data = addExtraAssumeCapacity(extra, EnumAuto{ |
| 10057 | .name = ini.name, | 10102 | .name = ini.name, |
| | 10103 | .name_nav = .none, |
| 10058 | .captures_len = 0, | 10104 | .captures_len = 0, |
| 10059 | .namespace = namespace, | 10105 | .namespace = namespace, |
| 10060 | .int_tag_type = ini.tag_ty, | 10106 | .int_tag_type = ini.tag_ty, |
| ... | @@ -10088,6 +10134,7 @@ pub fn getGeneratedTagEnumType( | ... | @@ -10088,6 +10134,7 @@ pub fn getGeneratedTagEnumType( |
| 10088 | }, | 10134 | }, |
| 10089 | .data = addExtraAssumeCapacity(extra, EnumExplicit{ | 10135 | .data = addExtraAssumeCapacity(extra, EnumExplicit{ |
| 10090 | .name = ini.name, | 10136 | .name = ini.name, |
| | 10137 | .name_nav = .none, |
| 10091 | .captures_len = 0, | 10138 | .captures_len = 0, |
| 10092 | .namespace = namespace, | 10139 | .namespace = namespace, |
| 10093 | .int_tag_type = ini.tag_ty, | 10140 | .int_tag_type = ini.tag_ty, |
| ... | @@ -10161,6 +10208,7 @@ pub fn getOpaqueType( | ... | @@ -10161,6 +10208,7 @@ pub fn getOpaqueType( |
| 10161 | }); | 10208 | }); |
| 10162 | const extra_index = addExtraAssumeCapacity(extra, Tag.TypeOpaque{ | 10209 | const extra_index = addExtraAssumeCapacity(extra, Tag.TypeOpaque{ |
| 10163 | .name = undefined, // set by `finish` | 10210 | .name = undefined, // set by `finish` |
| | 10211 | .name_nav = undefined, // set by `finish` |
| 10164 | .namespace = undefined, // set by `finish` | 10212 | .namespace = undefined, // set by `finish` |
| 10165 | .zir_index = switch (ini.key) { | 10213 | .zir_index = switch (ini.key) { |
| 10166 | inline else => |x| x.zir_index, | 10214 | inline else => |x| x.zir_index, |
| ... | @@ -10183,6 +10231,7 @@ pub fn getOpaqueType( | ... | @@ -10183,6 +10231,7 @@ pub fn getOpaqueType( |
| 10183 | .tid = tid, | 10231 | .tid = tid, |
| 10184 | .index = gop.put(), | 10232 | .index = gop.put(), |
| 10185 | .type_name_extra_index = extra_index + std.meta.fieldIndex(Tag.TypeOpaque, "name").?, | 10233 | .type_name_extra_index = extra_index + std.meta.fieldIndex(Tag.TypeOpaque, "name").?, |
| | 10234 | .name_nav_extra_index = extra_index + std.meta.fieldIndex(Tag.TypeOpaque, "name_nav").?, |
| 10186 | .namespace_extra_index = extra_index + std.meta.fieldIndex(Tag.TypeOpaque, "namespace").?, | 10235 | .namespace_extra_index = extra_index + std.meta.fieldIndex(Tag.TypeOpaque, "namespace").?, |
| 10187 | }, | 10236 | }, |
| 10188 | }; | 10237 | }; |
| ... | @@ -10299,6 +10348,7 @@ fn addExtraAssumeCapacity(extra: Local.Extra.Mutable, item: anytype) u32 { | ... | @@ -10299,6 +10348,7 @@ fn addExtraAssumeCapacity(extra: Local.Extra.Mutable, item: anytype) u32 { |
| 10299 | extra.appendAssumeCapacity(.{switch (field.type) { | 10348 | extra.appendAssumeCapacity(.{switch (field.type) { |
| 10300 | Index, | 10349 | Index, |
| 10301 | Nav.Index, | 10350 | Nav.Index, |
| | 10351 | Nav.Index.Optional, |
| 10302 | NamespaceIndex, | 10352 | NamespaceIndex, |
| 10303 | OptionalNamespaceIndex, | 10353 | OptionalNamespaceIndex, |
| 10304 | MapIndex, | 10354 | MapIndex, |
| ... | @@ -10361,6 +10411,7 @@ fn extraDataTrail(extra: Local.Extra, comptime T: type, index: u32) struct { dat | ... | @@ -10361,6 +10411,7 @@ fn extraDataTrail(extra: Local.Extra, comptime T: type, index: u32) struct { dat |
| 10361 | @field(result, field.name) = switch (field.type) { | 10411 | @field(result, field.name) = switch (field.type) { |
| 10362 | Index, | 10412 | Index, |
| 10363 | Nav.Index, | 10413 | Nav.Index, |
| | 10414 | Nav.Index.Optional, |
| 10364 | NamespaceIndex, | 10415 | NamespaceIndex, |
| 10365 | OptionalNamespaceIndex, | 10416 | OptionalNamespaceIndex, |
| 10366 | MapIndex, | 10417 | MapIndex, |