diff options
| author | Martin Wickham <spexguy070@gmail.com> | 2021-10-01 12:45:46 -0500 |
|---|---|---|
| committer | Martin Wickham <spexguy070@gmail.com> | 2021-10-02 15:21:49 -0500 |
| commit | 01e08c92b3d1a7895762e7b8f8a7913d08c3fa6c (patch) | |
| tree | 66872b2d6b5f03bdfb450d5184a6cf76020e751b /src/Module.zig | |
| parent | 53a36eacfa145244902e9230243c76892d141b03 (diff) | |
| download | zig-01e08c92b3d1a7895762e7b8f8a7913d08c3fa6c.tar.gz zig-01e08c92b3d1a7895762e7b8f8a7913d08c3fa6c.zip | |
Revert collateral changes, clarify abortAnonDecl()
Diffstat (limited to 'src/Module.zig')
| -rw-r--r-- | src/Module.zig | 23 |
1 files changed, 13 insertions, 10 deletions
diff --git a/src/Module.zig b/src/Module.zig index 3dd576e3fc..fb6bdad3ac 100644 --- a/src/Module.zig +++ b/src/Module.zig @@ -617,15 +617,17 @@ pub const Decl = struct { return tree.tokens.items(.start)[decl.srcToken()]; } - pub fn renderFullyQualifiedName(decl: *const Decl, writer: anytype) @TypeOf(writer).Error!void { - return try decl.src_namespace.renderFullyQualifiedName(mem.spanZ(decl.name), writer); + pub fn renderFullyQualifiedName(decl: Decl, writer: anytype) !void { + const unqualified_name = mem.spanZ(decl.name); + return decl.src_namespace.renderFullyQualifiedName(unqualified_name, writer); } - pub fn renderFullyQualifiedDebugName(decl: *const Decl, writer: anytype) @TypeOf(writer).Error!void { - return try decl.src_namespace.renderFullyQualifiedDebugName(mem.spanZ(decl.name), writer); + pub fn renderFullyQualifiedDebugName(decl: Decl, writer: anytype) !void { + const unqualified_name = mem.spanZ(decl.name); + return decl.src_namespace.renderFullyQualifiedDebugName(unqualified_name, writer); } - pub fn getFullyQualifiedName(decl: *const Decl, gpa: *Allocator) ![:0]u8 { + pub fn getFullyQualifiedName(decl: Decl, gpa: *Allocator) ![:0]u8 { var buffer = std.ArrayList(u8).init(gpa); defer buffer.deinit(); try decl.renderFullyQualifiedName(buffer.writer()); @@ -1246,7 +1248,7 @@ pub const Scope = struct { } } - // This renders e.g. "std.fs:Dir.OpenOptions" + /// This renders e.g. "std/fs.zig:Dir.OpenOptions" pub fn renderFullyQualifiedDebugName( ns: Namespace, name: []const u8, @@ -4055,16 +4057,17 @@ pub fn deleteUnusedDecl(mod: *Module, decl: *Decl) void { decl.destroy(mod); } +/// Cancel the creation of an anon decl and delete any references to it. +/// If other decls depend on this decl, they must be aborted first. pub fn abortAnonDecl(mod: *Module, decl: *Decl) void { log.debug("abortAnonDecl {*} ({s})", .{ decl, decl.name }); assert(!decl.isRoot()); assert(decl.src_namespace.anon_decls.swapRemove(decl)); - const dependants = decl.dependants.keys(); - for (dependants) |dep| { - dep.removeDependency(decl); - } + // An aborted decl must not have dependants -- they must have + // been aborted first and removed from this list. + assert(decl.dependants.count() == 0); for (decl.dependencies.keys()) |dep| { dep.removeDependant(decl); |
