aboutsummaryrefslogtreecommitdiff
path: root/src/Module.zig
diff options
context:
space:
mode:
authorMartin Wickham <spexguy070@gmail.com>2021-09-30 15:40:11 -0500
committerMartin Wickham <spexguy070@gmail.com>2021-10-02 15:21:48 -0500
commitb1e5081826ba383ebdb298117e5712b8c73fb22a (patch)
tree878f4d442af4c0a49fdab5cc2d149789cb5f5591 /src/Module.zig
parent269e54877051791790f5dffc4d4f1476834e4e43 (diff)
downloadzig-b1e5081826ba383ebdb298117e5712b8c73fb22a.tar.gz
zig-b1e5081826ba383ebdb298117e5712b8c73fb22a.zip
Fix rendering of type names
Diffstat (limited to 'src/Module.zig')
-rw-r--r--src/Module.zig11
1 files changed, 7 insertions, 4 deletions
diff --git a/src/Module.zig b/src/Module.zig
index c398081bc3..026052be84 100644
--- a/src/Module.zig
+++ b/src/Module.zig
@@ -617,12 +617,15 @@ pub const Decl = struct {
return tree.tokens.items(.start)[decl.srcToken()];
}
- pub fn renderFullyQualifiedName(decl: Decl, writer: anytype) !void {
- const unqualified_name = mem.spanZ(decl.name);
- return decl.namespace.renderFullyQualifiedName(unqualified_name, writer);
+ pub fn renderFullyQualifiedName(decl: *const Decl, writer: anytype) @TypeOf(writer).Error!void {
+ // Namespace decls (struct/enum/union/opaque) use their own namespace,
+ // which means the decl name and the namespace name are the same.
+ // In that case we want to omit the decl name, unless this is the root decl.
+ const unqualified_name = if (decl.namespace.getDecl() != decl or decl.namespace.parent == null) mem.spanZ(decl.name) else "";
+ return try decl.namespace.renderFullyQualifiedName(unqualified_name, writer);
}
- pub fn getFullyQualifiedName(decl: Decl, gpa: *Allocator) ![:0]u8 {
+ pub fn getFullyQualifiedName(decl: *const Decl, gpa: *Allocator) ![:0]u8 {
var buffer = std.ArrayList(u8).init(gpa);
defer buffer.deinit();
try decl.renderFullyQualifiedName(buffer.writer());