authorgravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2026-08-20 19:38:27-04:00
committergravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2026-09-03 12:59:38-04:00
log4184767f7d92e8efca05756abb12cf4d448f3f7a
tree3e15afe7249eb5860f0186a2fdcaea9ee5147b60
parentc41b7d1b850ba998bd253461536d25b06bcb41cb

Sema: add unqualified container type names


13 files changed, 213 insertions(+), 106 deletions(-)

src/IncrementalDebugServer.zig+3-3
......@@ -243,7 +243,7 @@ fn handleCommand(zcu: *Zcu, w: *Io.Writer, cmd_str: []const u8, arg_str: []const
243243 var num_results: usize = 0;
244244 for (zcu.incremental_debug_state.types.keys()) |type_ip_index| {
245245 const ty: Type = .fromInterned(type_ip_index);
246 const ty_name = ty.containerTypeName(ip).toSlice(ip);
246 const ty_name = ty.containerTypeName(ip).fqn.toSlice(ip);
247247 const success = switch (@as(u2, @intFromBool(anchor_start)) << 1 | @intFromBool(anchor_end)) {
248248 0b00 => std.mem.find(u8, ty_name, query) != null,
249249 0b01 => std.mem.endsWith(u8, ty_name, query),
......@@ -347,7 +347,7 @@ fn handleCommand(zcu: *Zcu, w: *Io.Writer, cmd_str: []const u8, arg_str: []const
347347 \\created on generation: {d}
348348 \\
349349 , .{
350 Type.fromInterned(ip_index).containerTypeName(ip).fmt(ip),
350 Type.fromInterned(ip_index).containerTypeName(ip).fqn.fmt(ip),
351351 create_gen,
352352 });
353353 } else if (std.mem.eql(u8, cmd_str, "type_namespace")) {
......@@ -451,7 +451,7 @@ fn printType(ty: Type, zcu: *const Zcu, w: *Io.Writer) Io.Writer.Error!void {
451451 .union_type,
452452 .enum_type,
453453 .opaque_type,
454 => try w.print("{f}[{d}]", .{ ty.containerTypeName(ip).fmt(ip), @backingInt(ty.toIntern()) }),
454 => try w.print("{f}[{d}]", .{ ty.containerTypeName(ip).fqn.fmt(ip), @backingInt(ty.toIntern()) }),
455455
456456 else => unreachable,
457457 }
src/InternPool.zig+47-4
......@@ -3207,9 +3207,10 @@ pub const LoadedStructType = struct {
32073207 captures: CaptureValue.Slice,
32083208 is_reified: bool,
32093209
3210 // TODO: the non-fqn will be needed by the new dwarf structure
32113210 /// The name of this struct type.
32123211 name: NullTerminatedString,
3212 /// The fully-qualified name of this struct type.
3213 fqn: NullTerminatedString,
32133214 /// If this is a declared type with the `.parent` name strategy, this is the `Nav` it was named after.
32143215 /// Otherwise, or if this is a file's root struct type, this is `.none`.
32153216 name_nav: Nav.Index.Optional,
......@@ -3390,9 +3391,10 @@ pub const LoadedUnionType = struct {
33903391 captures: CaptureValue.Slice,
33913392 is_reified: bool,
33923393
3393 // TODO: the non-fqn will be needed by the new dwarf structure
33943394 /// The name of this union type.
33953395 name: NullTerminatedString,
3396 /// The fully-qualified name of this union type.
3397 fqn: NullTerminatedString,
33963398 /// If this is a declared type with the `.parent` name strategy, this is the `Nav` it was named after.
33973399 /// Otherwise, this is `.none`.
33983400 name_nav: Nav.Index.Optional,
......@@ -3457,9 +3459,10 @@ pub const LoadedEnumType = struct {
34573459 owner_union: Index,
34583460 is_reified: bool,
34593461
3460 // TODO: the non-fqn will be needed by the new dwarf structure
34613462 /// The name of this enum type.
34623463 name: NullTerminatedString,
3464 /// The fully-qualified name of this enum type.
3465 fqn: NullTerminatedString,
34633466 /// If this is a declared type with the `.parent` name strategy, this is the `Nav` it was named after.
34643467 /// Otherwise, this is `.none`.
34653468 name_nav: Nav.Index.Optional,
......@@ -3519,9 +3522,10 @@ pub const LoadedOpaqueType = struct {
35193522 zir_index: TrackedInst.Index,
35203523 captures: CaptureValue.Slice,
35213524
3522 // TODO: the non-fqn will be needed by the new dwarf structure
35233525 /// The name of this opaque type.
35243526 name: NullTerminatedString,
3527 /// The fully-qualified name of this opaque type.
3528 fqn: NullTerminatedString,
35253529 /// If this is a declared type with the `.parent` name strategy, this is the `Nav` it was named after.
35263530 /// Otherwise, this is `.none`.
35273531 name_nav: Nav.Index.Optional,
......@@ -3607,6 +3611,7 @@ pub fn loadStructType(ip: *const InternPool, index: Index) LoadedStructType {
36073611 .captures = captures,
36083612 .is_reified = extra.data.flags.any_captures == .reified,
36093613 .name = extra.data.name,
3614 .fqn = extra.data.fqn,
36103615 .name_nav = extra.data.name_nav,
36113616 .namespace = extra.data.namespace,
36123617 .layout = switch (extra.data.flags.layout) {
......@@ -3670,6 +3675,7 @@ pub fn loadStructType(ip: *const InternPool, index: Index) LoadedStructType {
36703675 .captures = captures,
36713676 .is_reified = extra.data.bits.captures_len == .reified,
36723677 .name = extra.data.name,
3678 .fqn = extra.data.fqn,
36733679 .name_nav = extra.data.name_nav,
36743680 .namespace = extra.data.namespace,
36753681 .layout = .@"packed",
......@@ -3745,6 +3751,7 @@ pub fn loadUnionType(ip: *const InternPool, index: Index) LoadedUnionType {
37453751 .captures = captures,
37463752 .is_reified = extra.data.flags.any_captures == .reified,
37473753 .name = extra.data.name,
3754 .fqn = extra.data.fqn,
37483755 .name_nav = extra.data.name_nav,
37493756 .namespace = extra.data.namespace,
37503757 .layout = switch (extra.data.flags.layout) {
......@@ -3800,6 +3807,7 @@ pub fn loadUnionType(ip: *const InternPool, index: Index) LoadedUnionType {
38003807 .captures = captures,
38013808 .is_reified = extra.data.bits.captures_len == .reified,
38023809 .name = extra.data.name,
3810 .fqn = extra.data.fqn,
38033811 .name_nav = extra.data.name_nav,
38043812 .namespace = extra.data.namespace,
38053813 .layout = .@"packed",
......@@ -3880,6 +3888,7 @@ pub fn loadEnumType(ip: *const InternPool, index: Index) LoadedEnumType {
38803888 .is_reified = extra.data.bits.captures_len == .reified,
38813889 .owner_union = owner_union,
38823890 .name = extra.data.name,
3891 .fqn = extra.data.fqn,
38833892 .name_nav = extra.data.name_nav,
38843893 .namespace = extra.data.namespace,
38853894 .int_tag_type = extra.data.int_tag_type,
......@@ -3906,6 +3915,7 @@ pub fn loadOpaqueType(ip: *const InternPool, index: Index) LoadedOpaqueType {
39063915 .len = extra.data.captures_len,
39073916 },
39083917 .name = extra.data.name,
3918 .fqn = extra.data.fqn,
39093919 .name_nav = extra.data.name_nav,
39103920 .namespace = extra.data.namespace,
39113921 };
......@@ -5538,6 +5548,7 @@ pub const Tag = enum(u8) {
55385548 zir_index: TrackedInst.Index,
55395549
55405550 name: NullTerminatedString,
5551 fqn: NullTerminatedString,
55415552 name_nav: Nav.Index.Optional,
55425553 namespace: NamespaceIndex,
55435554
......@@ -5580,6 +5591,7 @@ pub const Tag = enum(u8) {
55805591 bits: Bits,
55815592
55825593 name: NullTerminatedString,
5594 fqn: NullTerminatedString,
55835595 name_nav: Nav.Index.Optional,
55845596 namespace: NamespaceIndex,
55855597
......@@ -5614,6 +5626,7 @@ pub const Tag = enum(u8) {
56145626 zir_index: TrackedInst.Index,
56155627
56165628 name: NullTerminatedString,
5629 fqn: NullTerminatedString,
56175630 name_nav: Nav.Index.Optional,
56185631 namespace: NamespaceIndex,
56195632 /// The enum that provides the list of field names and values.
......@@ -5673,6 +5686,7 @@ pub const Tag = enum(u8) {
56735686 bits: Bits,
56745687
56755688 name: NullTerminatedString,
5689 fqn: NullTerminatedString,
56765690 name_nav: Nav.Index.Optional,
56775691 namespace: NamespaceIndex,
56785692
......@@ -5708,6 +5722,7 @@ pub const Tag = enum(u8) {
57085722 bits: Bits,
57095723
57105724 name: NullTerminatedString,
5725 fqn: NullTerminatedString,
57115726 name_nav: Nav.Index.Optional,
57125727 namespace: NamespaceIndex,
57135728
......@@ -5735,6 +5750,7 @@ pub const Tag = enum(u8) {
57355750 captures_len: u32,
57365751
57375752 name: NullTerminatedString,
5753 fqn: NullTerminatedString,
57385754 name_nav: Nav.Index.Optional,
57395755 namespace: NamespaceIndex,
57405756 };
......@@ -8063,6 +8079,7 @@ pub fn getDeclaredStructType(
80638079 .want_layout = false,
80648080 },
80658081 .name = undefined, // set by `finish`
8082 .fqn = undefined, // set by `finish`
80668083 .name_nav = undefined, // set by `finish`
80678084 .namespace = undefined, // set by `finish`
80688085 .backing_int_type = .none,
......@@ -8086,6 +8103,7 @@ pub fn getDeclaredStructType(
80868103 .index = gop.put(),
80878104 .tid = tid,
80888105 .type_name_index = extra_index + std.meta.fieldIndex(Tag.TypeStructPacked, "name").?,
8106 .type_fqn_index = extra_index + std.meta.fieldIndex(Tag.TypeStructPacked, "fqn").?,
80898107 .name_nav_index = extra_index + std.meta.fieldIndex(Tag.TypeStructPacked, "name_nav").?,
80908108 .namespace_index = extra_index + std.meta.fieldIndex(Tag.TypeStructPacked, "namespace").?,
80918109 .field_names = undefined,
......@@ -8111,6 +8129,7 @@ pub fn getDeclaredStructType(
81118129 const extra_index = addExtraAssumeCapacity(extra, Tag.TypeStruct{
81128130 .zir_index = ini.zir_index,
81138131 .name = undefined, // set by `finish`
8132 .fqn = undefined, // set by `finish`
81148133 .name_nav = undefined, // set by `finish`
81158134 .namespace = undefined, // set by `finish`
81168135 .fields_len = ini.fields_len,
......@@ -8154,6 +8173,7 @@ pub fn getDeclaredStructType(
81548173 .index = gop.put(),
81558174 .tid = tid,
81568175 .type_name_index = extra_index + std.meta.fieldIndex(Tag.TypeStruct, "name").?,
8176 .type_fqn_index = extra_index + std.meta.fieldIndex(Tag.TypeStruct, "fqn").?,
81578177 .name_nav_index = extra_index + std.meta.fieldIndex(Tag.TypeStruct, "name_nav").?,
81588178 .namespace_index = extra_index + std.meta.fieldIndex(Tag.TypeStruct, "namespace").?,
81598179 .field_names = undefined,
......@@ -8207,6 +8227,7 @@ pub fn getReifiedStructType(ip: *InternPool, gpa: Allocator, io: Io, tid: Zcu.Pe
82078227 .want_layout = false,
82088228 },
82098229 .name = undefined, // set by `finish`
8230 .fqn = undefined, // set by `finish`
82108231 .name_nav = undefined, // set by `finish`
82118232 .namespace = undefined, // set by `finish`
82128233 .backing_int_type = ini.packed_backing_int_type,
......@@ -8233,6 +8254,7 @@ pub fn getReifiedStructType(ip: *InternPool, gpa: Allocator, io: Io, tid: Zcu.Pe
82338254 .index = gop.put(),
82348255 .tid = tid,
82358256 .type_name_index = extra_index + std.meta.fieldIndex(Tag.TypeStructPacked, "name").?,
8257 .type_fqn_index = extra_index + std.meta.fieldIndex(Tag.TypeStructPacked, "fqn").?,
82368258 .name_nav_index = extra_index + std.meta.fieldIndex(Tag.TypeStructPacked, "name_nav").?,
82378259 .namespace_index = extra_index + std.meta.fieldIndex(Tag.TypeStructPacked, "namespace").?,
82388260 .field_names = .{ .tid = tid, .start = field_names_start, .len = ini.fields_len },
......@@ -8260,6 +8282,7 @@ pub fn getReifiedStructType(ip: *InternPool, gpa: Allocator, io: Io, tid: Zcu.Pe
82608282 const extra_index = addExtraAssumeCapacity(extra, Tag.TypeStruct{
82618283 .zir_index = ini.zir_index,
82628284 .name = undefined, // set by `finish`
8285 .fqn = undefined, // set by `finish`
82638286 .name_nav = undefined, // set by `finish`
82648287 .namespace = undefined, // set by `finish`
82658288 .fields_len = ini.fields_len,
......@@ -8305,6 +8328,7 @@ pub fn getReifiedStructType(ip: *InternPool, gpa: Allocator, io: Io, tid: Zcu.Pe
83058328 .index = gop.put(),
83068329 .tid = tid,
83078330 .type_name_index = extra_index + std.meta.fieldIndex(Tag.TypeStruct, "name").?,
8331 .type_fqn_index = extra_index + std.meta.fieldIndex(Tag.TypeStruct, "fqn").?,
83088332 .name_nav_index = extra_index + std.meta.fieldIndex(Tag.TypeStruct, "name_nav").?,
83098333 .namespace_index = extra_index + std.meta.fieldIndex(Tag.TypeStruct, "namespace").?,
83108334 .field_names = .{ .tid = tid, .start = field_names_start, .len = ini.fields_len },
......@@ -8378,6 +8402,7 @@ pub fn getDeclaredUnionType(
83788402 .want_layout = false,
83798403 },
83808404 .name = undefined, // set by `finish`
8405 .fqn = undefined, // set by `finish`
83818406 .name_nav = undefined, // set by `finish`
83828407 .namespace = undefined, // set by `finish`
83838408 .backing_int_type = .none,
......@@ -8397,6 +8422,7 @@ pub fn getDeclaredUnionType(
83978422 .index = gop.put(),
83988423 .tid = tid,
83998424 .type_name_index = extra_index + std.meta.fieldIndex(Tag.TypeUnionPacked, "name").?,
8425 .type_fqn_index = extra_index + std.meta.fieldIndex(Tag.TypeUnionPacked, "fqn").?,
84008426 .name_nav_index = extra_index + std.meta.fieldIndex(Tag.TypeUnionPacked, "name_nav").?,
84018427 .namespace_index = extra_index + std.meta.fieldIndex(Tag.TypeUnionPacked, "namespace").?,
84028428 .field_names = undefined,
......@@ -8417,6 +8443,7 @@ pub fn getDeclaredUnionType(
84178443 const extra_index = addExtraAssumeCapacity(extra, Tag.TypeUnion{
84188444 .zir_index = ini.zir_index,
84198445 .name = undefined, // set by `finish`
8446 .fqn = undefined, // set by `finish`
84208447 .name_nav = undefined, // set by `finish`
84218448 .namespace = undefined, // set by `finish`
84228449 .enum_tag_type = .none,
......@@ -8451,6 +8478,7 @@ pub fn getDeclaredUnionType(
84518478 .index = gop.put(),
84528479 .tid = tid,
84538480 .type_name_index = extra_index + std.meta.fieldIndex(Tag.TypeUnion, "name").?,
8481 .type_fqn_index = extra_index + std.meta.fieldIndex(Tag.TypeUnion, "fqn").?,
84548482 .name_nav_index = extra_index + std.meta.fieldIndex(Tag.TypeUnion, "name_nav").?,
84558483 .namespace_index = extra_index + std.meta.fieldIndex(Tag.TypeUnion, "namespace").?,
84568484 .field_names = undefined,
......@@ -8501,6 +8529,7 @@ pub fn getReifiedUnionType(ip: *InternPool, gpa: Allocator, io: Io, tid: Zcu.Per
85018529 .want_layout = false,
85028530 },
85038531 .name = undefined, // set by `finish`
8532 .fqn = undefined, // set by `finish`
85048533 .name_nav = undefined, // set by `finish`
85058534 .namespace = undefined, // set by `finish`
85068535 .backing_int_type = ini.packed_backing_int_type,
......@@ -8523,6 +8552,7 @@ pub fn getReifiedUnionType(ip: *InternPool, gpa: Allocator, io: Io, tid: Zcu.Per
85238552 .index = gop.put(),
85248553 .tid = tid,
85258554 .type_name_index = extra_index + std.meta.fieldIndex(Tag.TypeUnionPacked, "name").?,
8555 .type_fqn_index = extra_index + std.meta.fieldIndex(Tag.TypeUnionPacked, "fqn").?,
85268556 .name_nav_index = extra_index + std.meta.fieldIndex(Tag.TypeUnionPacked, "name_nav").?,
85278557 .namespace_index = extra_index + std.meta.fieldIndex(Tag.TypeUnionPacked, "namespace").?,
85288558 .field_names = .{ .tid = tid, .start = field_names_start, .len = ini.fields_len },
......@@ -8543,6 +8573,7 @@ pub fn getReifiedUnionType(ip: *InternPool, gpa: Allocator, io: Io, tid: Zcu.Per
85438573 const extra_index = addExtraAssumeCapacity(extra, Tag.TypeUnion{
85448574 .zir_index = ini.zir_index,
85458575 .name = undefined, // set by `finish`
8576 .fqn = undefined, // set by `finish`
85468577 .name_nav = undefined, // set by `finish`
85478578 .namespace = undefined, // set by `finish`
85488579 .enum_tag_type = ini.enum_tag_type,
......@@ -8578,6 +8609,7 @@ pub fn getReifiedUnionType(ip: *InternPool, gpa: Allocator, io: Io, tid: Zcu.Per
85788609 .index = gop.put(),
85798610 .tid = tid,
85808611 .type_name_index = extra_index + std.meta.fieldIndex(Tag.TypeUnion, "name").?,
8612 .type_fqn_index = extra_index + std.meta.fieldIndex(Tag.TypeUnion, "fqn").?,
85818613 .name_nav_index = extra_index + std.meta.fieldIndex(Tag.TypeUnion, "name_nav").?,
85828614 .namespace_index = extra_index + std.meta.fieldIndex(Tag.TypeUnion, "namespace").?,
85838615 .field_names = .{ .tid = tid, .start = field_names_start, .len = ini.fields_len },
......@@ -8654,6 +8686,7 @@ pub fn getDeclaredEnumType(
86548686 .want_layout = false,
86558687 },
86568688 .name = undefined, // set by `finish`
8689 .fqn = undefined, // set by `finish`
86578690 .name_nav = undefined, // set by `finish`
86588691 .namespace = undefined, // set by `finish`
86598692 .int_tag_type = .none,
......@@ -8673,6 +8706,7 @@ pub fn getDeclaredEnumType(
86738706 .index = gop.put(),
86748707 .tid = tid,
86758708 .type_name_index = extra_index + std.meta.fieldIndex(Tag.TypeEnum, "name").?,
8709 .type_fqn_index = extra_index + std.meta.fieldIndex(Tag.TypeEnum, "fqn").?,
86768710 .name_nav_index = extra_index + std.meta.fieldIndex(Tag.TypeEnum, "name_nav").?,
86778711 .namespace_index = extra_index + std.meta.fieldIndex(Tag.TypeEnum, "namespace").?,
86788712 .field_names = undefined,
......@@ -8729,6 +8763,7 @@ pub fn getReifiedEnumType(ip: *InternPool, gpa: Allocator, io: Io, tid: Zcu.PerT
87298763 .want_layout = false,
87308764 },
87318765 .name = undefined, // set by `finish`
8766 .fqn = undefined, // set by `finish`
87328767 .name_nav = undefined, // set by `finish`
87338768 .namespace = undefined, // set by `finish`
87348769 .int_tag_type = ini.int_tag_type,
......@@ -8750,6 +8785,7 @@ pub fn getReifiedEnumType(ip: *InternPool, gpa: Allocator, io: Io, tid: Zcu.PerT
87508785 .index = gop.put(),
87518786 .tid = tid,
87528787 .type_name_index = extra_index + std.meta.fieldIndex(Tag.TypeEnum, "name").?,
8788 .type_fqn_index = extra_index + std.meta.fieldIndex(Tag.TypeEnum, "fqn").?,
87538789 .name_nav_index = extra_index + std.meta.fieldIndex(Tag.TypeEnum, "name_nav").?,
87548790 .namespace_index = extra_index + std.meta.fieldIndex(Tag.TypeEnum, "namespace").?,
87558791 .field_names = .{ .tid = tid, .start = field_names_start, .len = ini.fields_len },
......@@ -8828,6 +8864,7 @@ pub fn getGeneratedEnumTagType(ip: *InternPool, gpa: Allocator, io: Io, tid: Zcu
88288864 .want_layout = false,
88298865 },
88308866 .name = undefined, // set by `finish`
8867 .fqn = undefined, // set by `finish`
88318868 .name_nav = undefined, // set by `finish`
88328869 .namespace = undefined, // set by `finish`
88338870 .int_tag_type = .none,
......@@ -8849,6 +8886,7 @@ pub fn getGeneratedEnumTagType(ip: *InternPool, gpa: Allocator, io: Io, tid: Zcu
88498886 .index = gop.put(),
88508887 .tid = tid,
88518888 .type_name_index = extra_index + std.meta.fieldIndex(Tag.TypeEnum, "name").?,
8889 .type_fqn_index = extra_index + std.meta.fieldIndex(Tag.TypeEnum, "fqn").?,
88528890 .name_nav_index = extra_index + std.meta.fieldIndex(Tag.TypeEnum, "name_nav").?,
88538891 .namespace_index = extra_index + std.meta.fieldIndex(Tag.TypeEnum, "namespace").?,
88548892 .field_names = undefined,
......@@ -8880,6 +8918,7 @@ pub fn getDeclaredOpaqueType(ip: *InternPool, gpa: Allocator, io: Io, tid: Zcu.P
88808918 .zir_index = ini.zir_index,
88818919 .captures_len = @intCast(ini.captures.len),
88828920 .name = undefined, // set by `finish`
8921 .fqn = undefined, // set by `finish`
88838922 .name_nav = undefined, // set by `finish`
88848923 .namespace = undefined, // set by `finish`
88858924 });
......@@ -8892,6 +8931,7 @@ pub fn getDeclaredOpaqueType(ip: *InternPool, gpa: Allocator, io: Io, tid: Zcu.P
88928931 .index = gop.put(),
88938932 .tid = tid,
88948933 .type_name_index = extra_index + std.meta.fieldIndex(Tag.TypeOpaque, "name").?,
8934 .type_fqn_index = extra_index + std.meta.fieldIndex(Tag.TypeOpaque, "fqn").?,
88958935 .name_nav_index = extra_index + std.meta.fieldIndex(Tag.TypeOpaque, "name_nav").?,
88968936 .namespace_index = extra_index + std.meta.fieldIndex(Tag.TypeOpaque, "namespace").?,
88978937 .field_names = undefined,
......@@ -8906,6 +8946,7 @@ pub const WipContainerType = struct {
89068946 index: Index,
89078947 tid: Zcu.PerThread.Id,
89088948 type_name_index: u32,
8949 type_fqn_index: u32,
89098950 name_nav_index: u32,
89108951 namespace_index: u32,
89118952
......@@ -8923,6 +8964,7 @@ pub const WipContainerType = struct {
89238964 wip: WipContainerType,
89248965 ip: *InternPool,
89258966 type_name: NullTerminatedString,
8967 type_fqn: NullTerminatedString,
89268968 /// This should be the `Nav` we are named after if we use the `.parent` name strategy; `.none` otherwise.
89278969 /// This is also `.none` if we use `.parent` because we are the root struct type for a file.
89288970 name_nav: Nav.Index.Optional,
......@@ -8930,6 +8972,7 @@ pub const WipContainerType = struct {
89308972 const extra = ip.getLocalShared(wip.tid).extra.acquire();
89318973 const extra_items = extra.view().items(.@"0");
89328974 extra_items[wip.type_name_index] = @backingInt(type_name);
8975 extra_items[wip.type_fqn_index] = @backingInt(type_fqn);
89338976 extra_items[wip.name_nav_index] = @backingInt(name_nav);
89348977 }
89358978
src/Sema.zig+37-11
......@@ -403,6 +403,7 @@ pub const Block = struct {
403403 /// is always incorporated into the type name somehow.
404404 /// See `Sema.setTypeName`.
405405 type_name_ctx: InternPool.NullTerminatedString,
406 type_fqn_ctx: InternPool.NullTerminatedString,
406407
407408 /// Create a `LazySrcLoc` based on an `Offset` from the code being analyzed in this block.
408409 /// Specifically, the given `Offset` is treated as relative to `block.src_base_inst`.
......@@ -531,6 +532,7 @@ pub const Block = struct {
531532 .need_debug_scope = parent.need_debug_scope,
532533 .src_base_inst = parent.src_base_inst,
533534 .type_name_ctx = parent.type_name_ctx,
535 .type_fqn_ctx = parent.type_fqn_ctx,
534536 };
535537 }
536538
......@@ -4782,7 +4784,7 @@ fn failWithBadStructFieldAccess(
47824784 const msg = try sema.errMsg(
47834785 field_src,
47844786 "no field named '{f}' in struct '{f}'",
4785 .{ field_name.fmt(ip), struct_type.name.fmt(ip) },
4787 .{ field_name.fmt(ip), struct_type.fqn.fmt(ip) },
47864788 );
47874789 errdefer msg.destroy(sema.gpa);
47884790 try sema.errNote(struct_ty.srcLoc(zcu), msg, "struct declared here", .{});
......@@ -4808,7 +4810,7 @@ fn failWithBadUnionFieldAccess(
48084810 const msg = try sema.errMsg(
48094811 field_src,
48104812 "no field named '{f}' in union '{f}'",
4811 .{ field_name.fmt(ip), union_obj.name.fmt(ip) },
4813 .{ field_name.fmt(ip), union_obj.fqn.fmt(ip) },
48124814 );
48134815 errdefer msg.destroy(gpa);
48144816 try sema.errNote(union_ty.srcLoc(zcu), msg, "union declared here", .{});
......@@ -5291,6 +5293,7 @@ fn zirBlock(sema: *Sema, parent_block: *Block, inst: Zir.Inst.Index) CompileErro
52915293 .error_return_trace_index = parent_block.error_return_trace_index,
52925294 .src_base_inst = parent_block.src_base_inst,
52935295 .type_name_ctx = parent_block.type_name_ctx,
5296 .type_fqn_ctx = parent_block.type_fqn_ctx,
52945297 };
52955298
52965299 defer child_block.instructions.deinit(gpa);
......@@ -6773,7 +6776,8 @@ fn analyzeCall(
67736776 .instructions = .empty,
67746777 .inlining = &generic_inlining,
67756778 .src_base_inst = fn_nav.analysis.?.zir_index,
6776 .type_name_ctx = fn_nav.fqn,
6779 .type_name_ctx = fn_nav.name,
6780 .type_fqn_ctx = fn_nav.fqn,
67776781 } else undefined;
67786782 defer if (any_generic_types) generic_block.instructions.deinit(gpa);
67796783
......@@ -7309,7 +7313,8 @@ fn analyzeCall(
73097313 .runtime_loop = block.runtime_loop,
73107314 .runtime_index = block.runtime_index,
73117315 .src_base_inst = fn_nav.analysis.?.zir_index,
7312 .type_name_ctx = fn_nav.fqn,
7316 .type_name_ctx = fn_nav.name,
7317 .type_fqn_ctx = fn_nav.fqn,
73137318 };
73147319
73157320 defer child_block.instructions.deinit(gpa);
......@@ -17315,6 +17320,7 @@ fn zirTypeofBuiltin(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileErr
1731517320 .error_return_trace_index = block.error_return_trace_index,
1731617321 .src_base_inst = block.src_base_inst,
1731717322 .type_name_ctx = block.type_name_ctx,
17323 .type_fqn_ctx = block.type_fqn_ctx,
1731817324 };
1731917325 defer child_block.instructions.deinit(sema.gpa);
1732017326
......@@ -17381,6 +17387,7 @@ fn zirTypeofPeer(
1738117387 .runtime_index = block.runtime_index,
1738217388 .src_base_inst = block.src_base_inst,
1738317389 .type_name_ctx = block.type_name_ctx,
17390 .type_fqn_ctx = block.type_fqn_ctx,
1738417391 };
1738517392 defer child_block.instructions.deinit(sema.gpa);
1738617393 // Ignore the result, we only care about the instructions in `args`.
......@@ -17940,6 +17947,7 @@ fn ensurePostHoc(sema: *Sema, block: *Block, dest_block: Zir.Inst.Index) !*Label
1794017947 .comptime_reason = block.comptime_reason,
1794117948 .src_base_inst = block.src_base_inst,
1794217949 .type_name_ctx = block.type_name_ctx,
17950 .type_fqn_ctx = block.type_fqn_ctx,
1794317951 },
1794417952 };
1794517953 sema.post_hoc_blocks.putAssumeCapacityNoClobber(new_block_inst, labeled_block);
......@@ -25935,6 +25943,7 @@ fn addSafetyCheck(
2593525943 .comptime_reason = null,
2593625944 .src_base_inst = parent_block.src_base_inst,
2593725945 .type_name_ctx = parent_block.type_name_ctx,
25946 .type_fqn_ctx = parent_block.type_fqn_ctx,
2593825947 };
2593925948
2594025949 defer fail_block.instructions.deinit(gpa);
......@@ -26029,6 +26038,7 @@ fn addSafetyCheckUnwrapError(
2602926038 .comptime_reason = null,
2603026039 .src_base_inst = parent_block.src_base_inst,
2603126040 .type_name_ctx = parent_block.type_name_ctx,
26041 .type_fqn_ctx = parent_block.type_fqn_ctx,
2603226042 };
2603326043
2603426044 defer fail_block.instructions.deinit(gpa);
......@@ -26152,6 +26162,7 @@ fn addSafetyCheckCall(
2615226162 .comptime_reason = null,
2615326163 .src_base_inst = parent_block.src_base_inst,
2615426164 .type_name_ctx = parent_block.type_name_ctx,
26165 .type_fqn_ctx = parent_block.type_fqn_ctx,
2615526166 };
2615626167
2615726168 defer fail_block.instructions.deinit(gpa);
......@@ -34994,6 +35005,7 @@ pub fn analyzeMemoizedState(sema: *Sema, stage: InternPool.MemoizedStateStage) C
3499435005 .comptime_reason = null,
3499535006 .src_base_inst = std_type.typeDeclInst(zcu).?,
3499635007 .type_name_ctx = .empty,
35008 .type_fqn_ctx = .empty,
3499735009 };
3499835010 };
3499935011 defer block.instructions.deinit(gpa);
......@@ -35225,10 +35237,17 @@ pub fn setTypeName(
3522535237 "{f}__{s}_{d}",
3522635238 .{ block.type_name_ctx.fmt(ip), anon_prefix, zcu.anon_name_counter },
3522735239 .no_embedded_nulls,
35240 ), try ip.getOrPutStringFmt(
35241 gpa,
35242 io,
35243 pt.tid,
35244 "{f}__{s}_{d}",
35245 .{ block.type_fqn_ctx.fmt(ip), anon_prefix, zcu.anon_name_counter },
35246 .no_embedded_nulls,
3522835247 ), .none);
3522935248 zcu.anon_name_counter += 1;
3523035249 },
35231 .parent => wip.setName(ip, block.type_name_ctx, sema.owner.unwrap().nav_val.toOptional()),
35250 .parent => wip.setName(ip, block.type_name_ctx, block.type_fqn_ctx, sema.owner.unwrap().nav_val.toOptional()),
3523235251 .func => {
3523335252 const fn_info = sema.code.getFnInfo(ip.funcZirBodyInst(sema.func_index).resolve(ip) orelse {
3523435253 return sema.failTransitive(.{ .lost_tracking = ip.funcZirBodyInst(sema.func_index) });
......@@ -35238,7 +35257,7 @@ pub fn setTypeName(
3523835257 var aw: std.Io.Writer.Allocating = .init(gpa);
3523935258 defer aw.deinit();
3524035259 const w = &aw.writer;
35241 w.print("{f}(", .{block.type_name_ctx.fmt(ip)}) catch return error.OutOfMemory;
35260 w.writeByte('(') catch return error.OutOfMemory;
3524235261
3524335262 var arg_i: usize = 0;
3524435263 for (fn_info.param_body) |zir_inst| switch (zir_tags[@backingInt(zir_inst)]) {
......@@ -35273,8 +35292,13 @@ pub fn setTypeName(
3527335292 };
3527435293
3527535294 w.writeByte(')') catch return error.OutOfMemory;
35276 const name = try ip.getOrPutString(gpa, io, pt.tid, aw.written(), .no_embedded_nulls);
35277 wip.setName(ip, name, .none);
35295 wip.setName(ip, try ip.getOrPutStringFmt(gpa, io, pt.tid, "{f}{s}", .{
35296 block.type_name_ctx.fmt(ip),
35297 aw.written(),
35298 }, .no_embedded_nulls), try ip.getOrPutStringFmt(gpa, io, pt.tid, "{f}{s}", .{
35299 block.type_fqn_ctx.fmt(ip),
35300 aw.written(),
35301 }, .no_embedded_nulls), .none);
3527835302 },
3527935303 .dbg_var => {
3528035304 // TODO: this logic is questionable. We ideally should be traversing the `Block` rather than relying on the order of AstGen instructions.
......@@ -35289,10 +35313,12 @@ pub fn setTypeName(
3528935313 } else {
3529035314 continue :strat .anon;
3529135315 };
35292 const name = try ip.getOrPutStringFmt(gpa, io, pt.tid, "{f}.{s}", .{
35316 wip.setName(ip, try ip.getOrPutStringFmt(gpa, io, pt.tid, "{f}.{s}", .{
35317 // this "{f}." should be elided, but there's currently no way to get the parent function
3529335318 block.type_name_ctx.fmt(ip), var_name,
35294 }, .no_embedded_nulls);
35295 wip.setName(ip, name, .none);
35319 }, .no_embedded_nulls), try ip.getOrPutStringFmt(gpa, io, pt.tid, "{f}.{s}", .{
35320 block.type_fqn_ctx.fmt(ip), var_name,
35321 }, .no_embedded_nulls), .none);
3529635322 },
3529735323 }
3529835324}
src/Sema/type_resolution.zig+15-4
......@@ -187,7 +187,7 @@ pub fn resolveStructLayout(sema: *Sema, struct_ty: Type) CompileError!void {
187187
188188 const tracy = trace(@src());
189189 defer tracy.end();
190 tracy.addText(struct_ty.containerTypeName(ip).toSlice(ip));
190 tracy.addText(struct_ty.containerTypeName(ip).fqn.toSlice(ip));
191191 tracy.addTextFmt("ip_index={d}", .{struct_ty.toIntern()});
192192
193193 assert(sema.owner.unwrap().type_layout == struct_ty.toIntern());
......@@ -207,6 +207,7 @@ pub fn resolveStructLayout(sema: *Sema, struct_ty: Type) CompileError!void {
207207 .comptime_reason = undefined, // always set before using `block`
208208 .src_base_inst = struct_obj.zir_index,
209209 .type_name_ctx = struct_obj.name,
210 .type_fqn_ctx = struct_obj.fqn,
210211 };
211212 defer block.instructions.deinit(gpa);
212213
......@@ -613,7 +614,7 @@ pub fn resolveStructDefaults(sema: *Sema, struct_ty: Type) CompileError!void {
613614
614615 const tracy = trace(@src());
615616 defer tracy.end();
616 tracy.addText(struct_ty.containerTypeName(ip).toSlice(ip));
617 tracy.addText(struct_ty.containerTypeName(ip).fqn.toSlice(ip));
617618 tracy.addTextFmt("ip_index={d}", .{struct_ty.toIntern()});
618619
619620 assert(sema.owner.unwrap().struct_defaults == struct_ty.toIntern());
......@@ -653,6 +654,7 @@ pub fn resolveStructDefaults(sema: *Sema, struct_ty: Type) CompileError!void {
653654 .comptime_reason = undefined, // always set before using `block`
654655 .src_base_inst = struct_obj.zir_index,
655656 .type_name_ctx = struct_obj.name,
657 .type_fqn_ctx = struct_obj.fqn,
656658 };
657659 defer block.instructions.deinit(gpa);
658660
......@@ -727,7 +729,7 @@ pub fn resolveUnionLayout(sema: *Sema, union_ty: Type) CompileError!void {
727729
728730 const tracy = trace(@src());
729731 defer tracy.end();
730 tracy.addText(union_ty.containerTypeName(ip).toSlice(ip));
732 tracy.addText(union_ty.containerTypeName(ip).fqn.toSlice(ip));
731733 tracy.addTextFmt("ip_index={d}", .{union_ty.toIntern()});
732734
733735 assert(sema.owner.unwrap().type_layout == union_ty.toIntern());
......@@ -747,6 +749,7 @@ pub fn resolveUnionLayout(sema: *Sema, union_ty: Type) CompileError!void {
747749 .comptime_reason = undefined, // always set before using `block`
748750 .src_base_inst = union_obj.zir_index,
749751 .type_name_ctx = union_obj.name,
752 .type_fqn_ctx = union_obj.fqn,
750753 };
751754 defer block.instructions.deinit(gpa);
752755
......@@ -801,6 +804,13 @@ pub fn resolveUnionLayout(sema: *Sema, union_ty: Type) CompileError!void {
801804 "@typeInfo({f}).@\"union\".tag_type.?",
802805 .{union_obj.name.fmt(ip)},
803806 .no_embedded_nulls,
807 ), try ip.getOrPutStringFmt(
808 gpa,
809 io,
810 pt.tid,
811 "@typeInfo({f}).@\"union\".tag_type.?",
812 .{union_obj.fqn.fmt(ip)},
813 .no_embedded_nulls,
804814 ), .none);
805815 const new_namespace_index: InternPool.NamespaceIndex = try pt.createNamespace(.{
806816 .parent = union_obj.namespace.toOptional(),
......@@ -1221,7 +1231,7 @@ pub fn resolveEnumLayout(sema: *Sema, enum_ty: Type) CompileError!void {
12211231
12221232 const tracy = trace(@src());
12231233 defer tracy.end();
1224 tracy.addText(enum_ty.containerTypeName(ip).toSlice(ip));
1234 tracy.addText(enum_ty.containerTypeName(ip).fqn.toSlice(ip));
12251235 tracy.addTextFmt("ip_index={d}", .{enum_ty.toIntern()});
12261236
12271237 assert(sema.owner.unwrap().type_layout == enum_ty.toIntern());
......@@ -1248,6 +1258,7 @@ pub fn resolveEnumLayout(sema: *Sema, enum_ty: Type) CompileError!void {
12481258 .comptime_reason = undefined, // always set before using `block`
12491259 .src_base_inst = tracked_inst,
12501260 .type_name_ctx = enum_obj.name,
1261 .type_fqn_ctx = enum_obj.fqn,
12511262 };
12521263 defer block.instructions.deinit(gpa);
12531264
src/Type.zig+30-15
......@@ -607,8 +607,8 @@ pub fn print(ty: Type, writer: *std.Io.Writer, pt: Zcu.PerThread, ctx: ?*Compari
607607 .generic_poison => unreachable,
608608 },
609609 .struct_type => {
610 const name = ip.loadStructType(ty.toIntern()).name;
611 try writer.print("{f}", .{name.fmt(ip)});
610 const fqn = ip.loadStructType(ty.toIntern()).fqn;
611 try writer.print("{f}", .{fqn.fmt(ip)});
612612 },
613613 .tuple_type => |tuple| {
614614 if (tuple.types.len == 0) {
......@@ -625,16 +625,16 @@ pub fn print(ty: Type, writer: *std.Io.Writer, pt: Zcu.PerThread, ctx: ?*Compari
625625 },
626626
627627 .union_type => {
628 const name = ip.loadUnionType(ty.toIntern()).name;
629 try writer.print("{f}", .{name.fmt(ip)});
628 const fqn = ip.loadUnionType(ty.toIntern()).fqn;
629 try writer.print("{f}", .{fqn.fmt(ip)});
630630 },
631631 .opaque_type => {
632 const name = ip.loadOpaqueType(ty.toIntern()).name;
633 try writer.print("{f}", .{name.fmt(ip)});
632 const fqn = ip.loadOpaqueType(ty.toIntern()).fqn;
633 try writer.print("{f}", .{fqn.fmt(ip)});
634634 },
635635 .enum_type => {
636 const name = ip.loadEnumType(ty.toIntern()).name;
637 try writer.print("{f}", .{name.fmt(ip)});
636 const fqn = ip.loadEnumType(ty.toIntern()).fqn;
637 try writer.print("{f}", .{fqn.fmt(ip)});
638638 },
639639 .spirv_type => {
640640 const info = ip.loadSpirvType(ty.toIntern());
......@@ -3020,14 +3020,29 @@ pub fn fieldPtrType(ptr_ty: Type, field_index: u32, pt: Zcu.PerThread) Allocator
30203020 return pt.ptrType(field_ptr_info);
30213021}
30223022
3023pub fn containerTypeName(ty: Type, ip: *const InternPool) InternPool.NullTerminatedString {
3024 return switch (ip.indexToKey(ty.toIntern())) {
3025 .struct_type => ip.loadStructType(ty.toIntern()).name,
3026 .union_type => ip.loadUnionType(ty.toIntern()).name,
3027 .enum_type => ip.loadEnumType(ty.toIntern()).name,
3028 .opaque_type => ip.loadOpaqueType(ty.toIntern()).name,
3023pub fn containerTypeName(ty: Type, ip: *const InternPool) struct {
3024 name: InternPool.NullTerminatedString,
3025 fqn: InternPool.NullTerminatedString,
3026} {
3027 switch (ip.indexToKey(ty.toIntern())) {
3028 .struct_type => {
3029 const loaded_struct = ip.loadStructType(ty.toIntern());
3030 return .{ .name = loaded_struct.name, .fqn = loaded_struct.fqn };
3031 },
3032 .union_type => {
3033 const loaded_union = ip.loadUnionType(ty.toIntern());
3034 return .{ .name = loaded_union.name, .fqn = loaded_union.fqn };
3035 },
3036 .enum_type => {
3037 const loaded_enum = ip.loadEnumType(ty.toIntern());
3038 return .{ .name = loaded_enum.name, .fqn = loaded_enum.fqn };
3039 },
3040 .opaque_type => {
3041 const loaded_opaque = ip.loadOpaqueType(ty.toIntern());
3042 return .{ .name = loaded_opaque.name, .fqn = loaded_opaque.fqn };
3043 },
30293044 else => unreachable,
3030 };
3045 }
30313046}
30323047
30333048pub fn destructurable(ty: Type, zcu: *const Zcu) bool {
src/Zcu.zig+18-18
......@@ -947,9 +947,9 @@ pub const Namespace = struct {
947947 tid: Zcu.PerThread.Id,
948948 name: InternPool.NullTerminatedString,
949949 ) !InternPool.NullTerminatedString {
950 const ns_name = Type.fromInterned(ns.owner_type).containerTypeName(ip);
951 if (name == .empty) return ns_name;
952 return ip.getOrPutStringFmt(gpa, io, tid, "{f}.{f}", .{ ns_name.fmt(ip), name.fmt(ip) }, .no_embedded_nulls);
950 const ns_fqn = Type.fromInterned(ns.owner_type).containerTypeName(ip).fqn;
951 if (name == .empty) return ns_fqn;
952 return ip.getOrPutStringFmt(gpa, io, tid, "{f}.{f}", .{ ns_fqn.fmt(ip), name.fmt(ip) }, .no_embedded_nulls);
953953 }
954954};
955955
......@@ -4237,7 +4237,7 @@ fn resolveReferencesInner(zcu: *Zcu) Allocator.Error!std.array_hash_map.Auto(Ana
42374237 const referencer = types.values()[type_idx];
42384238 type_idx += 1;
42394239
4240 refs_log.debug("handle type '{f}'", .{Type.fromInterned(ty).containerTypeName(ip).fmt(ip)});
4240 refs_log.debug("handle type '{f}'", .{Type.fromInterned(ty).containerTypeName(ip).fqn.fmt(ip)});
42414241
42424242 // Queue any decls within this type which would be automatically analyzed.
42434243 // Keep in sync with analysis queueing logic in `Zcu.PerThread.ScanDeclIter.scanDecl`.
......@@ -4248,7 +4248,7 @@ fn resolveReferencesInner(zcu: *Zcu) Allocator.Error!std.array_hash_map.Auto(Ana
42484248 const gop = try units.getOrPut(gpa, unit);
42494249 if (!gop.found_existing) {
42504250 refs_log.debug("type '{f}': ref comptime %{}", .{
4251 Type.fromInterned(ty).containerTypeName(ip).fmt(ip),
4251 Type.fromInterned(ty).containerTypeName(ip).fqn.fmt(ip),
42524252 @backingInt(ip.getComptimeUnit(cu).zir_index.resolve(ip) orelse continue),
42534253 });
42544254 gop.value_ptr.* = referencer;
......@@ -4282,7 +4282,7 @@ fn resolveReferencesInner(zcu: *Zcu) Allocator.Error!std.array_hash_map.Auto(Ana
42824282 const gop = try units.getOrPut(gpa, .wrap(.{ .nav_val = nav_id }));
42834283 if (!gop.found_existing) {
42844284 refs_log.debug("type '{f}': ref test %{}", .{
4285 Type.fromInterned(ty).containerTypeName(ip).fmt(ip),
4285 Type.fromInterned(ty).containerTypeName(ip).fqn.fmt(ip),
42864286 @backingInt(inst_info.inst),
42874287 });
42884288 gop.value_ptr.* = referencer;
......@@ -4305,7 +4305,7 @@ fn resolveReferencesInner(zcu: *Zcu) Allocator.Error!std.array_hash_map.Auto(Ana
43054305 const gop = try units.getOrPut(gpa, unit);
43064306 if (!gop.found_existing) {
43074307 refs_log.debug("type '{f}': ref named %{}", .{
4308 Type.fromInterned(ty).containerTypeName(ip).fmt(ip),
4308 Type.fromInterned(ty).containerTypeName(ip).fqn.fmt(ip),
43094309 @backingInt(inst_info.inst),
43104310 });
43114311 gop.value_ptr.* = referencer;
......@@ -4322,7 +4322,7 @@ fn resolveReferencesInner(zcu: *Zcu) Allocator.Error!std.array_hash_map.Auto(Ana
43224322 const gop = try units.getOrPut(gpa, unit);
43234323 if (!gop.found_existing) {
43244324 refs_log.debug("type '{f}': ref named %{}", .{
4325 Type.fromInterned(ty).containerTypeName(ip).fmt(ip),
4325 Type.fromInterned(ty).containerTypeName(ip).fqn.fmt(ip),
43264326 @backingInt(inst_info.inst),
43274327 });
43284328 gop.value_ptr.* = referencer;
......@@ -4385,7 +4385,7 @@ fn resolveReferencesInner(zcu: *Zcu) Allocator.Error!std.array_hash_map.Auto(Ana
43854385 if (!gop.found_existing) {
43864386 refs_log.debug("unit '{f}': ref type '{f}'", .{
43874387 zcu.fmtAnalUnit(unit),
4388 Type.fromInterned(ref.referenced).containerTypeName(ip).fmt(ip),
4388 Type.fromInterned(ref.referenced).containerTypeName(ip).fqn.fmt(ip),
43894389 });
43904390 gop.value_ptr.* = .{
43914391 .referencer = unit,
......@@ -4498,7 +4498,7 @@ fn formatAnalUnit(data: FormatAnalUnit, writer: *Io.Writer) Io.Writer.Error!void
44984498 }
44994499 },
45004500 .nav_val, .nav_ty => |nav, tag| return writer.print("{t}('{f}' [{}])", .{ tag, ip.getNav(nav).fqn.fmt(ip), @backingInt(nav) }),
4501 .type_layout, .struct_defaults => |ty, tag| return writer.print("{t}('{f}' [{}])", .{ tag, Type.fromInterned(ty).containerTypeName(ip).fmt(ip), @backingInt(ty) }),
4501 .type_layout, .struct_defaults => |ty, tag| return writer.print("{t}('{f}' [{}])", .{ tag, Type.fromInterned(ty).containerTypeName(ip).fqn.fmt(ip), @backingInt(ty) }),
45024502 .func => |func| {
45034503 const nav = zcu.funcInfo(func).owner_nav;
45044504 return writer.print("func('{f}' [{}])", .{ ip.getNav(nav).fqn.fmt(ip), @backingInt(func) });
......@@ -4524,8 +4524,8 @@ fn formatDependee(data: FormatDependee, writer: *Io.Writer) Io.Writer.Error!void
45244524 return writer.print("{t}('{f}')", .{ tag, fqn.fmt(ip) });
45254525 },
45264526 .type_layout, .struct_defaults => |ip_index, tag| {
4527 const name = Type.fromInterned(ip_index).containerTypeName(ip);
4528 return writer.print("{t}('{f}')", .{ tag, name.fmt(ip) });
4527 const fqn = Type.fromInterned(ip_index).containerTypeName(ip).fqn;
4528 return writer.print("{t}('{f}')", .{ tag, fqn.fmt(ip) });
45294529 },
45304530 .func_ies => |ip_index| {
45314531 const fqn = ip.getNav(ip.indexToKey(ip_index).func.owner_nav).fqn;
......@@ -5002,7 +5002,7 @@ fn addDependencyLoopErrorLine(
50025002 }),
50035003 .struct_defaults => |ty| try eb.printString(
50045004 "default field values of '{f}' depend on themselves for initialization here",
5005 .{Type.fromInterned(ty).containerTypeName(ip).fmt(ip)},
5005 .{Type.fromInterned(ty).containerTypeName(ip).fqn.fmt(ip)},
50065006 ),
50075007 } else switch (dep_node.unit.unwrap()) {
50085008 .@"comptime" => unreachable, // cannot be involved in a dependency loop
......@@ -5021,12 +5021,12 @@ fn addDependencyLoopErrorLine(
50215021 }),
50225022 .type_layout => |ty| try eb.printString("{f} depends on type '{f}' {s}", .{
50235023 fmt_source,
5024 Type.fromInterned(ty).containerTypeName(ip).fmt(ip),
5024 Type.fromInterned(ty).containerTypeName(ip).fqn.fmt(ip),
50255025 dep_node.reason.type_layout_reason.msg(),
50265026 }),
50275027 .struct_defaults => |ty| try eb.printString(
50285028 "{f} uses default field values of '{f}' here",
5029 .{ fmt_source, Type.fromInterned(ty).containerTypeName(ip).fmt(ip) },
5029 .{ fmt_source, Type.fromInterned(ty).containerTypeName(ip).fqn.fmt(ip) },
50305030 ),
50315031 };
50325032
......@@ -5068,10 +5068,10 @@ fn formatDependencyLoopSourceUnit(data: FormatAnalUnit, w: *Io.Writer) Io.Writer
50685068 else => try w.writeAll("'std.lang' declarations"),
50695069 },
50705070 .type_layout => |ty| try w.print("type '{f}'", .{
5071 Type.fromInterned(ty).containerTypeName(ip).fmt(ip),
5071 Type.fromInterned(ty).containerTypeName(ip).fqn.fmt(ip),
50725072 }),
50735073 .struct_defaults => |ty| try w.print("default field value of '{f}'", .{
5074 Type.fromInterned(ty).containerTypeName(ip).fmt(ip),
5074 Type.fromInterned(ty).containerTypeName(ip).fqn.fmt(ip),
50755075 }),
50765076 .func => |func| try w.print("function '{f}'", .{
50775077 ip.getNav(zcu.funcInfo(func).owner_nav).fqn.fmt(ip),
......@@ -5121,7 +5121,7 @@ pub fn populateReferenceTrace(
51215121 const root_name: ?[]const u8 = switch (ref.referencer.unwrap()) {
51225122 .@"comptime" => "comptime",
51235123 .nav_val, .nav_ty => |nav| ip.getNav(nav).name.toSlice(ip),
5124 .type_layout, .struct_defaults => |ty| Type.fromInterned(ty).containerTypeName(ip).toSlice(ip),
5124 .type_layout, .struct_defaults => |ty| Type.fromInterned(ty).containerTypeName(ip).fqn.toSlice(ip),
51255125 .func => |f| ip.getNav(zcu.funcInfo(f).owner_nav).name.toSlice(ip),
51265126 .memoized_state => null,
51275127 };
src/Zcu/PerThread.zig+21-9
......@@ -1026,7 +1026,12 @@ pub fn ensureFilePopulated(pt: Zcu.PerThread, file_index: Zcu.File.Index) (Alloc
10261026 };
10271027 errdefer wip.cancel(ip, pt.tid);
10281028
1029 wip.setName(ip, try file.internFullyQualifiedName(pt), .none);
1029 wip.setName(
1030 ip,
1031 try ip.getOrPutString(gpa, io, pt.tid, std.fs.path.stem(file.sub_file_path), .no_embedded_nulls),
1032 try file.internFullyQualifiedName(pt),
1033 .none,
1034 );
10301035 const new_namespace_index: InternPool.NamespaceIndex = try pt.createNamespace(.{
10311036 .parent = .none,
10321037 .owner_type = wip.index,
......@@ -1267,6 +1272,7 @@ fn analyzeComptimeUnit(pt: Zcu.PerThread, cu_id: InternPool.ComptimeUnit.Id) Zcu
12671272 // The comptime unit declares on the source of the corresponding `comptime` declaration.
12681273 try sema.declareDependency(.{ .src_hash = comptime_unit.zir_index });
12691274
1275 const parent_ns = Type.fromInterned(zcu.namespacePtr(comptime_unit.namespace).owner_type).containerTypeName(ip);
12701276 var block: Sema.Block = .{
12711277 .parent = null,
12721278 .sema = &sema,
......@@ -1282,7 +1288,10 @@ fn analyzeComptimeUnit(pt: Zcu.PerThread, cu_id: InternPool.ComptimeUnit.Id) Zcu
12821288 } },
12831289 .src_base_inst = comptime_unit.zir_index,
12841290 .type_name_ctx = try ip.getOrPutStringFmt(gpa, io, pt.tid, "{f}.comptime", .{
1285 Type.fromInterned(zcu.namespacePtr(comptime_unit.namespace).owner_type).containerTypeName(ip).fmt(ip),
1291 parent_ns.name.fmt(ip),
1292 }, .no_embedded_nulls),
1293 .type_fqn_ctx = try ip.getOrPutStringFmt(gpa, io, pt.tid, "{f}.comptime", .{
1294 parent_ns.fqn.fmt(ip),
12861295 }, .no_embedded_nulls),
12871296 };
12881297 defer block.instructions.deinit(gpa);
......@@ -1358,7 +1367,7 @@ pub fn ensureTypeLayoutUpToDate(
13581367 info.deps.clearRetainingCapacity();
13591368 }
13601369
1361 const unit_tracking = zcu.trackUnitSema(ty.containerTypeName(ip).toSlice(ip), null);
1370 const unit_tracking = zcu.trackUnitSema(ty.containerTypeName(ip).fqn.toSlice(ip), null);
13621371 defer unit_tracking.end(zcu);
13631372
13641373 try zcu.analysis_in_progress.put(gpa, anal_unit, reason);
......@@ -1470,7 +1479,7 @@ pub fn ensureStructDefaultsUpToDate(
14701479 info.deps.clearRetainingCapacity();
14711480 }
14721481
1473 const unit_tracking = zcu.trackUnitSema(ty.containerTypeName(ip).toSlice(ip), null);
1482 const unit_tracking = zcu.trackUnitSema(ty.containerTypeName(ip).fqn.toSlice(ip), null);
14741483 defer unit_tracking.end(zcu);
14751484
14761485 try zcu.analysis_in_progress.put(gpa, anal_unit, reason);
......@@ -1679,7 +1688,8 @@ fn analyzeNavVal(
16791688 .inlining = null,
16801689 .comptime_reason = undefined, // set below
16811690 .src_base_inst = old_nav.analysis.?.zir_index,
1682 .type_name_ctx = old_nav.fqn,
1691 .type_name_ctx = old_nav.name,
1692 .type_fqn_ctx = old_nav.fqn,
16831693 };
16841694 defer block.instructions.deinit(gpa);
16851695
......@@ -2048,7 +2058,8 @@ fn analyzeNavType(
20482058 .inlining = null,
20492059 .comptime_reason = undefined, // set below
20502060 .src_base_inst = old_nav.analysis.?.zir_index,
2051 .type_name_ctx = old_nav.fqn,
2061 .type_name_ctx = old_nav.name,
2062 .type_fqn_ctx = old_nav.fqn,
20522063 };
20532064 defer block.instructions.deinit(gpa);
20542065
......@@ -2989,11 +3000,11 @@ pub fn scanNamespace(
29893000
29903001 const tracy_trace = trace(@src());
29913002 defer tracy_trace.end();
2992 tracy_trace.addText(Type.fromInterned(namespace.owner_type).containerTypeName(ip).toSlice(ip));
3003 tracy_trace.addText(Type.fromInterned(namespace.owner_type).containerTypeName(ip).fqn.toSlice(ip));
29933004 tracy_trace.addTextFmt("type_ip_index={d}", .{namespace.owner_type});
29943005
29953006 const tracked_unit = zcu.trackUnitSema(
2996 Type.fromInterned(namespace.owner_type).containerTypeName(ip).toSlice(ip),
3007 Type.fromInterned(namespace.owner_type).containerTypeName(ip).fqn.toSlice(ip),
29973008 null,
29983009 );
29993010 defer tracked_unit.end(zcu);
......@@ -3315,7 +3326,8 @@ fn analyzeFuncBodyInner(
33153326 .inlining = null,
33163327 .comptime_reason = null,
33173328 .src_base_inst = decl_analysis.zir_index,
3318 .type_name_ctx = func_nav.fqn,
3329 .type_name_ctx = func_nav.name,
3330 .type_fqn_ctx = func_nav.fqn,
33193331 };
33203332 defer inner_block.instructions.deinit(gpa);
33213333
src/codegen/c.zig+3-3
......@@ -2175,11 +2175,11 @@ pub fn genTagNameFn(
21752175 }
21762176
21772177 if (!zcu.comp.config.root_strip) try w.print("/* @tagName({f}) */\n", .{
2178 loaded_enum.name.fmt(ip),
2178 loaded_enum.fqn.fmt(ip),
21792179 });
21802180 try w.print("static {s} zig_tagName_{f}__{d}({s} tag) {{\n", .{
21812181 slice_const_u8_sentinel_0_type_name,
2182 fmtIdentUnsolo(loaded_enum.name.toSlice(ip)),
2182 fmtIdentUnsolo(loaded_enum.fqn.toSlice(ip)),
21832183 @backingInt(enum_ty.toIntern()),
21842184 enum_type_name,
21852185 });
......@@ -6667,7 +6667,7 @@ fn airTagName(f: *Function, inst: Air.Inst.Index) !CValue {
66676667 try f.writeCValue(w, local, .other);
66686668 try f.need_tag_name_funcs.put(gpa, enum_ty.toIntern(), {});
66696669 try w.print(" = zig_tagName_{f}__{d}(", .{
6670 fmtIdentUnsolo(enum_ty.containerTypeName(ip).toSlice(ip)),
6670 fmtIdentUnsolo(enum_ty.containerTypeName(ip).fqn.toSlice(ip)),
66716671 @backingInt(enum_ty.toIntern()),
66726672 });
66736673 try f.writeCValue(w, operand, .other);
src/codegen/c/type.zig+3-3
......@@ -1140,17 +1140,17 @@ pub const CType = union(enum) {
11401140 try w.print("_{f}", .{fmtZigType(field_ty, zcu)});
11411141 }
11421142 } else {
1143 const name = ty.containerTypeName(ip).toSlice(ip);
1143 const name = ty.containerTypeName(ip).fqn.toSlice(ip);
11441144 try w.print("{f}", .{@import("../c.zig").fmtIdentUnsolo(name)});
11451145 },
11461146 .@"opaque" => if (ty.toIntern() == .anyopaque_type) {
11471147 try w.writeAll("anyopaque");
11481148 } else {
1149 const name = ty.containerTypeName(ip).toSlice(ip);
1149 const name = ty.containerTypeName(ip).fqn.toSlice(ip);
11501150 try w.print("{f}", .{@import("../c.zig").fmtIdentUnsolo(name)});
11511151 },
11521152 .@"union", .@"enum" => {
1153 const name = ty.containerTypeName(ip).toSlice(ip);
1153 const name = ty.containerTypeName(ip).fqn.toSlice(ip);
11541154 try w.print("{f}", .{@import("../c.zig").fmtIdentUnsolo(name)});
11551155 },
11561156 }
src/codegen/llvm.zig+5-5
......@@ -2893,7 +2893,7 @@ pub const Object = struct {
28932893 }
28942894 }
28952895
2896 const ty = try o.builder.opaqueType(try o.builder.string(t.containerTypeName(ip).toSlice(ip)));
2896 const ty = try o.builder.opaqueType(try o.builder.string(t.containerTypeName(ip).fqn.toSlice(ip)));
28972897 try o.type_map.put(o.gpa, t.toIntern(), ty);
28982898
28992899 o.builder.namedTypeSetBody(
......@@ -2983,7 +2983,7 @@ pub const Object = struct {
29832983 };
29842984
29852985 if (layout.tag_size == 0) {
2986 const ty = try o.builder.opaqueType(try o.builder.string(t.containerTypeName(ip).toSlice(ip)));
2986 const ty = try o.builder.opaqueType(try o.builder.string(t.containerTypeName(ip).fqn.toSlice(ip)));
29872987 try o.type_map.put(o.gpa, t.toIntern(), ty);
29882988
29892989 o.builder.namedTypeSetBody(
......@@ -3011,7 +3011,7 @@ pub const Object = struct {
30113011 llvm_fields_len += 1;
30123012 }
30133013
3014 const ty = try o.builder.opaqueType(try o.builder.string(t.containerTypeName(ip).toSlice(ip)));
3014 const ty = try o.builder.opaqueType(try o.builder.string(t.containerTypeName(ip).fqn.toSlice(ip)));
30153015 try o.type_map.put(o.gpa, t.toIntern(), ty);
30163016
30173017 o.builder.namedTypeSetBody(
......@@ -4026,7 +4026,7 @@ pub const Object = struct {
40264026 // Dummy function type; `updateEnumTagNameFunction` will replace it with the correct type.
40274027 // TODO: change the builder API so we don't need to do this.
40284028 try o.builder.fnType(.void, &.{}, .normal),
4029 try o.builder.strtabStringFmt("__zig_tag_name_{f}", .{enum_ty.containerTypeName(ip).fmt(ip)}),
4029 try o.builder.strtabStringFmt("__zig_tag_name_{f}", .{enum_ty.containerTypeName(ip).fqn.fmt(ip)}),
40304030 toLlvmAddressSpace(.generic, zcu.getTarget()),
40314031 );
40324032 gop.value_ptr.* = llvm_function;
......@@ -4123,7 +4123,7 @@ pub const Object = struct {
41234123 // Dummy function type; `updateIsNamedEnumValue` will replace it with the correct type.
41244124 // TODO: change the builder API so we don't need to do this.
41254125 try o.builder.fnType(.void, &.{}, .normal),
4126 try o.builder.strtabStringFmt("__zig_is_named_enum_value_{f}", .{enum_ty.containerTypeName(ip).fmt(ip)}),
4126 try o.builder.strtabStringFmt("__zig_is_named_enum_value_{f}", .{enum_ty.containerTypeName(ip).fqn.fmt(ip)}),
41274127 toLlvmAddressSpace(.generic, zcu.getTarget()),
41284128 );
41294129 gop.value_ptr.* = llvm_function;
src/link.zig+2-2
......@@ -1705,8 +1705,8 @@ pub fn doZcuTask(comp: *Compilation, tid: Zcu.PerThread.Id, task: ZcuTask) void
17051705 break :nav ip.indexToKey(func).func.owner_nav;
17061706 },
17071707 .debug_update_container_type => |container_update| nav: {
1708 const name = Type.fromInterned(container_update.ty).containerTypeName(ip).toSlice(ip);
1709 const ty_prog_node = comp.link_prog_node.start(name, 0);
1708 const fqn = Type.fromInterned(container_update.ty).containerTypeName(ip).fqn.toSlice(ip);
1709 const ty_prog_node = comp.link_prog_node.start(fqn, 0);
17101710 defer ty_prog_node.end();
17111711 (if (zcu.llvm_object) |llvm_object|
17121712 llvm_object.updateContainerType(pt, container_update.ty, container_update.success)
src/link/Dwarf.zig+15-15
......@@ -3387,12 +3387,12 @@ fn updateConstIncompleteInner(dwarf: *Dwarf, pt: Zcu.PerThread, debug_const_inde
33873387 const file_gop = try dwarf.getModInfo(unit).files.getOrPut(dwarf.gpa, file_index);
33883388 try wip_nav.abbrevCode(.empty_file);
33893389 try wip_nav.debug_info.writer.writeUleb128(file_gop.index);
3390 try wip_nav.strp(loaded_struct.name.toSlice(ip));
3390 try wip_nav.strp(loaded_struct.fqn.toSlice(ip));
33913391 } else {
33923392 try dwarf.emitIncompleteContainerType(
33933393 &wip_nav,
33943394 loaded_struct.zir_index,
3395 loaded_struct.name,
3395 loaded_struct.fqn,
33963396 loaded_struct.name_nav,
33973397 );
33983398 }
......@@ -3402,7 +3402,7 @@ fn updateConstIncompleteInner(dwarf: *Dwarf, pt: Zcu.PerThread, debug_const_inde
34023402 try dwarf.emitIncompleteContainerType(
34033403 &wip_nav,
34043404 loaded_union.zir_index,
3405 loaded_union.name,
3405 loaded_union.fqn,
34063406 loaded_union.name_nav,
34073407 );
34083408 },
......@@ -3412,12 +3412,12 @@ fn updateConstIncompleteInner(dwarf: *Dwarf, pt: Zcu.PerThread, debug_const_inde
34123412 try dwarf.emitIncompleteContainerType(
34133413 &wip_nav,
34143414 zir_index,
3415 loaded_enum.name,
3415 loaded_enum.fqn,
34163416 loaded_enum.name_nav,
34173417 );
34183418 } else {
34193419 try wip_nav.abbrevCode(.generated_empty_struct_type);
3420 try wip_nav.strp(loaded_enum.name.toSlice(ip));
3420 try wip_nav.strp(loaded_enum.fqn.toSlice(ip));
34213421 try wip_nav.debug_info.writer.writeByte(@intFromBool(true));
34223422 }
34233423 },
......@@ -3426,7 +3426,7 @@ fn updateConstIncompleteInner(dwarf: *Dwarf, pt: Zcu.PerThread, debug_const_inde
34263426 try dwarf.emitIncompleteContainerType(
34273427 &wip_nav,
34283428 loaded_opaque.zir_index,
3429 loaded_opaque.name,
3429 loaded_opaque.fqn,
34303430 loaded_opaque.name_nav,
34313431 );
34323432 },
......@@ -3451,7 +3451,7 @@ fn emitIncompleteContainerType(
34513451 dwarf: *Dwarf,
34523452 wip_nav: *WipNav,
34533453 zir_index: InternPool.TrackedInst.Index,
3454 name: InternPool.NullTerminatedString,
3454 fqn: InternPool.NullTerminatedString,
34553455 name_nav: InternPool.Nav.Index.Optional,
34563456) !void {
34573457 const zcu = wip_nav.pt.zcu;
......@@ -3472,7 +3472,7 @@ fn emitIncompleteContainerType(
34723472 const file_gop = try dwarf.getModInfo(wip_nav.unit).files.getOrPut(dwarf.gpa, file);
34733473 try wip_nav.abbrevCode(.empty_struct_type);
34743474 try diw.writeUleb128(file_gop.index);
3475 try wip_nav.strp(name.toSlice(ip));
3475 try wip_nav.strp(fqn.toSlice(ip));
34763476 try diw.writeByte(@intFromBool(true));
34773477 }
34783478}
......@@ -3895,7 +3895,7 @@ fn updateConstInner(dwarf: *Dwarf, pt: Zcu.PerThread, debug_const_index: link.Co
38953895 else => if (struct_is_file) .file else .struct_type,
38963896 });
38973897 try diw.writeUleb128(file_gop.index);
3898 try wip_nav.strp(loaded_struct.name.toSlice(ip));
3898 try wip_nav.strp(loaded_struct.fqn.toSlice(ip));
38993899 }
39003900 if (loaded_struct.field_types.len == 0) {
39013901 if (!struct_is_file) try diw.writeByte(@intFromBool(false));
......@@ -3968,7 +3968,7 @@ fn updateConstInner(dwarf: *Dwarf, pt: Zcu.PerThread, debug_const_index: link.Co
39683968 const file_gop = try dwarf.getModInfo(unit).files.getOrPut(dwarf.gpa, file);
39693969 try wip_nav.abbrevCode(if (loaded_struct.field_types.len > 0) .packed_struct_type else .empty_packed_struct_type);
39703970 try diw.writeUleb128(file_gop.index);
3971 try wip_nav.strp(loaded_struct.name.toSlice(ip));
3971 try wip_nav.strp(loaded_struct.fqn.toSlice(ip));
39723972 break :t loaded_struct.field_types.len > 0;
39733973 };
39743974 try wip_nav.refType(.fromInterned(loaded_struct.packed_backing_int_type));
......@@ -4005,7 +4005,7 @@ fn updateConstInner(dwarf: *Dwarf, pt: Zcu.PerThread, debug_const_index: link.Co
40054005 const file_gop = try dwarf.getModInfo(unit).files.getOrPut(dwarf.gpa, file);
40064006 try wip_nav.abbrevCode(if (loaded_union.field_types.len > 0) .union_type else .empty_union_type);
40074007 try diw.writeUleb128(file_gop.index);
4008 try wip_nav.strp(loaded_union.name.toSlice(ip));
4008 try wip_nav.strp(loaded_union.fqn.toSlice(ip));
40094009 break :t loaded_union.field_types.len > 0;
40104010 };
40114011 const union_layout = Type.getUnionLayout(loaded_union, zcu);
......@@ -4067,7 +4067,7 @@ fn updateConstInner(dwarf: *Dwarf, pt: Zcu.PerThread, debug_const_index: link.Co
40674067 const file_gop = try dwarf.getModInfo(unit).files.getOrPut(dwarf.gpa, file);
40684068 try wip_nav.abbrevCode(if (loaded_union.field_types.len > 0) .packed_union_type else .empty_packed_union_type);
40694069 try diw.writeUleb128(file_gop.index);
4070 try wip_nav.strp(loaded_union.name.toSlice(ip));
4070 try wip_nav.strp(loaded_union.fqn.toSlice(ip));
40714071 break :t loaded_union.field_types.len > 0;
40724072 };
40734073 try wip_nav.refType(.fromInterned(loaded_union.packed_backing_int_type));
......@@ -4103,7 +4103,7 @@ fn updateConstInner(dwarf: *Dwarf, pt: Zcu.PerThread, debug_const_index: link.Co
41034103 const file_gop = try dwarf.getModInfo(unit).files.getOrPut(dwarf.gpa, file);
41044104 try wip_nav.abbrevCode(if (loaded_enum.field_names.len > 0) .enum_type else .empty_enum_type);
41054105 try diw.writeUleb128(file_gop.index);
4106 try wip_nav.strp(loaded_enum.name.toSlice(ip));
4106 try wip_nav.strp(loaded_enum.fqn.toSlice(ip));
41074107 }
41084108 try wip_nav.refType(.fromInterned(loaded_enum.int_tag_type));
41094109 for (0..loaded_enum.field_names.len) |field_index| {
......@@ -4115,7 +4115,7 @@ fn updateConstInner(dwarf: *Dwarf, pt: Zcu.PerThread, debug_const_index: link.Co
41154115 } else {
41164116 assert(loaded_enum.owner_union != .none);
41174117 try wip_nav.abbrevCode(if (loaded_enum.field_names.len == 0) .generated_empty_enum_type else .generated_enum_type);
4118 try wip_nav.strp(loaded_enum.name.toSlice(ip));
4118 try wip_nav.strp(loaded_enum.fqn.toSlice(ip));
41194119 try wip_nav.refType(.fromInterned(loaded_enum.int_tag_type));
41204120 for (0..loaded_enum.field_names.len) |field_index| {
41214121 try wip_nav.abbrevCode(.enum_field);
......@@ -4141,7 +4141,7 @@ fn updateConstInner(dwarf: *Dwarf, pt: Zcu.PerThread, debug_const_index: link.Co
41414141 const file_gop = try dwarf.getModInfo(unit).files.getOrPut(dwarf.gpa, file);
41424142 try wip_nav.abbrevCode(.empty_struct_type);
41434143 try diw.writeUleb128(file_gop.index);
4144 try wip_nav.strp(loaded_opaque.name.toSlice(ip));
4144 try wip_nav.strp(loaded_opaque.fqn.toSlice(ip));
41454145 }
41464146 try diw.writeByte(@intFromBool(true));
41474147 },
src/link/Dwarf2.zig+14-14
......@@ -2349,7 +2349,7 @@ fn updateConstInner(
23492349 else => if (struct_is_file) .file else .struct_type,
23502350 }));
23512351 try diw.writeUleb128(@backingInt(fi));
2352 try dwarf.strp(&dwarf.debug_str, di_nw, loaded_struct.name.toSlice(ip));
2352 try dwarf.strp(&dwarf.debug_str, di_nw, loaded_struct.fqn.toSlice(ip));
23532353 }
23542354 if (loaded_struct.field_types.len > 0) {
23552355 const ty: Type = .fromInterned(val);
......@@ -2422,14 +2422,14 @@ fn updateConstInner(
24222422 if (loaded_enum.field_names.len > 0) .enum_type else .empty_enum_type,
24232423 ));
24242424 try diw.writeUleb128(@backingInt(fi));
2425 try dwarf.strp(&dwarf.debug_str, di_nw, loaded_enum.name.toSlice(ip));
2425 try dwarf.strp(&dwarf.debug_str, di_nw, loaded_enum.fqn.toSlice(ip));
24262426 }
24272427 } else {
24282428 assert(loaded_enum.owner_union != .none);
24292429 try diw.writeUleb128(try dwarf.refAbbrevCode(
24302430 if (loaded_enum.field_names.len == 0) .generated_empty_enum_type else .generated_enum_type,
24312431 ));
2432 try dwarf.strp(&dwarf.debug_str, di_nw, loaded_enum.name.toSlice(ip));
2432 try dwarf.strp(&dwarf.debug_str, di_nw, loaded_enum.fqn.toSlice(ip));
24332433 }
24342434 try dwarf.refConst(pt, di_nw, .fromInterned(loaded_enum.int_tag_type));
24352435 for (0..loaded_enum.field_names.len) |field_index| {
......@@ -2465,7 +2465,7 @@ fn updateConstIncompleteInner(
24652465 const ip = &zcu.intern_pool;
24662466 const diw = &di_nw.interface;
24672467 done: {
2468 const src_inst, const zf, const capture_names, const captures, const name, const maybe_name_nav, const namespace = container: switch (ip.indexToKey(val)) {
2468 const src_inst, const zf, const capture_names, const captures, const fqn, const maybe_name_nav, const namespace = container: switch (ip.indexToKey(val)) {
24692469 .struct_type => {
24702470 const loaded_struct = ip.loadStructType(val);
24712471 const src_inst = loaded_struct.zir_index.resolveFull(ip) orelse {
......@@ -2479,7 +2479,7 @@ fn updateConstIncompleteInner(
24792479 _, const fi = try ui.get(dwarf).getFile(zcu.gpa, ui, src_inst.file);
24802480 try diw.writeUleb128(try dwarf.refAbbrevCode(.empty_file));
24812481 try diw.writeUleb128(@backingInt(fi));
2482 try dwarf.strp(&dwarf.debug_str, di_nw, loaded_struct.name.toSlice(ip));
2482 try dwarf.strp(&dwarf.debug_str, di_nw, loaded_struct.fqn.toSlice(ip));
24832483 try diw.writeByte(@intFromBool(true));
24842484 break :done;
24852485 },
......@@ -2488,7 +2488,7 @@ fn updateConstIncompleteInner(
24882488 zf,
24892489 zf.zir.?.getStructDecl(src_inst.inst).capture_names,
24902490 loaded_struct.captures,
2491 loaded_struct.name,
2491 loaded_struct.fqn,
24922492 loaded_struct.name_nav,
24932493 loaded_struct.namespace,
24942494 },
......@@ -2506,7 +2506,7 @@ fn updateConstIncompleteInner(
25062506 zf,
25072507 zf.zir.?.getUnionDecl(src_inst.inst).capture_names,
25082508 loaded_union.captures,
2509 loaded_union.name,
2509 loaded_union.fqn,
25102510 loaded_union.name_nav,
25112511 loaded_union.namespace,
25122512 };
......@@ -2515,7 +2515,7 @@ fn updateConstIncompleteInner(
25152515 const loaded_enum = ip.loadEnumType(val);
25162516 const zir_index = loaded_enum.zir_index.unwrap() orelse {
25172517 try diw.writeUleb128(try dwarf.refAbbrevCode(.generated_empty_struct_type));
2518 try dwarf.strp(&dwarf.debug_str, di_nw, loaded_enum.name.toSlice(ip));
2518 try dwarf.strp(&dwarf.debug_str, di_nw, loaded_enum.fqn.toSlice(ip));
25192519 try diw.writeByte(@intFromBool(true));
25202520 break :done;
25212521 };
......@@ -2529,7 +2529,7 @@ fn updateConstIncompleteInner(
25292529 zf,
25302530 zf.zir.?.getEnumDecl(src_inst.inst).capture_names,
25312531 loaded_enum.captures,
2532 loaded_enum.name,
2532 loaded_enum.fqn,
25332533 loaded_enum.name_nav,
25342534 loaded_enum.namespace,
25352535 };
......@@ -2546,7 +2546,7 @@ fn updateConstIncompleteInner(
25462546 zf,
25472547 zf.zir.?.getOpaqueDecl(src_inst.inst).capture_names,
25482548 loaded_opaque.captures,
2549 loaded_opaque.name,
2549 loaded_opaque.fqn,
25502550 loaded_opaque.name_nav,
25512551 loaded_opaque.namespace,
25522552 };
......@@ -2597,7 +2597,7 @@ fn updateConstIncompleteInner(
25972597 if (capturing) .capturing_empty_struct_type else .empty_struct_type,
25982598 ));
25992599 try diw.writeUleb128(@backingInt(fi));
2600 try dwarf.strp(&dwarf.debug_str, di_nw, name.toSlice(ip));
2600 try dwarf.strp(&dwarf.debug_str, di_nw, fqn.toSlice(ip));
26012601 }
26022602 try diw.writeByte(@intFromBool(true));
26032603 if (capturing) {
......@@ -2661,7 +2661,7 @@ fn genDeclInner(
26612661 try diw.writeInt(u32, 0, dwarf.endian);
26622662 try diw.writeUleb128(0);
26632663 try diw.writeByte(DW.ACCESS.public);
2664 try dwarf.strp(&dwarf.debug_str, di_nw, loaded_struct.name.toSlice(ip));
2664 try dwarf.strp(&dwarf.debug_str, di_nw, loaded_struct.fqn.toSlice(ip));
26652665 },
26662666 .enum_type => {
26672667 const loaded_enum = ip.loadEnumType(instance_val);
......@@ -2673,7 +2673,7 @@ fn genDeclInner(
26732673 try diw.writeInt(u32, 0, dwarf.endian);
26742674 try diw.writeUleb128(0);
26752675 try diw.writeByte(DW.ACCESS.public);
2676 try dwarf.strp(&dwarf.debug_str, di_nw, loaded_enum.name.toSlice(ip));
2676 try dwarf.strp(&dwarf.debug_str, di_nw, loaded_enum.fqn.toSlice(ip));
26772677 },
26782678 .union_type => {
26792679 const loaded_union = ip.loadUnionType(instance_val);
......@@ -2685,7 +2685,7 @@ fn genDeclInner(
26852685 try diw.writeInt(u32, 0, dwarf.endian);
26862686 try diw.writeUleb128(0);
26872687 try diw.writeByte(DW.ACCESS.public);
2688 try dwarf.strp(&dwarf.debug_str, di_nw, loaded_union.name.toSlice(ip));
2688 try dwarf.strp(&dwarf.debug_str, di_nw, loaded_union.fqn.toSlice(ip));
26892689 },
26902690 }
26912691 try dwarf.genDebugInfoPadding(diw, diw.unusedCapacityLen());