authorgravatar for spexguy070@gmail.comMartin Wickham <spexguy070@gmail.com> 2021-09-30 15:40:11-05:00
committergravatar for spexguy070@gmail.comMartin Wickham <spexguy070@gmail.com> 2021-10-02 15:21:48-05:00
logb1e5081826ba383ebdb298117e5712b8c73fb22a
tree878f4d442af4c0a49fdab5cc2d149789cb5f5591
parent269e54877051791790f5dffc4d4f1476834e4e43

Fix rendering of type names


1 files changed, 7 insertions(+), 4 deletions(-)

src/Module.zig+7-4
...@@ -617,12 +617,15 @@ pub const Decl = struct {...@@ -617,12 +617,15 @@ pub const Decl = struct {
617 return tree.tokens.items(.start)[decl.srcToken()];617 return tree.tokens.items(.start)[decl.srcToken()];
618 }618 }
619619
620 pub fn renderFullyQualifiedName(decl: Decl, writer: anytype) !void {620 pub fn renderFullyQualifiedName(decl: *const Decl, writer: anytype) @TypeOf(writer).Error!void {
621 const unqualified_name = mem.spanZ(decl.name);621 // Namespace decls (struct/enum/union/opaque) use their own namespace,
622 return decl.namespace.renderFullyQualifiedName(unqualified_name, writer);622 // which means the decl name and the namespace name are the same.
623 // In that case we want to omit the decl name, unless this is the root decl.
624 const unqualified_name = if (decl.namespace.getDecl() != decl or decl.namespace.parent == null) mem.spanZ(decl.name) else "";
625 return try decl.namespace.renderFullyQualifiedName(unqualified_name, writer);
623 }626 }
624627
625 pub fn getFullyQualifiedName(decl: Decl, gpa: *Allocator) ![:0]u8 {628 pub fn getFullyQualifiedName(decl: *const Decl, gpa: *Allocator) ![:0]u8 {
626 var buffer = std.ArrayList(u8).init(gpa);629 var buffer = std.ArrayList(u8).init(gpa);
627 defer buffer.deinit();630 defer buffer.deinit();
628 try decl.renderFullyQualifiedName(buffer.writer());631 try decl.renderFullyQualifiedName(buffer.writer());