Commit 01e08c92b3

Martin Wickham <spexguy070@gmail.com>
2021-10-01 19:45:46
Revert collateral changes, clarify abortAnonDecl()
1 parent 53a36ea
Changed files (1)
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);