Revert collateral changes, clarify abortAnonDecl()

This commit is contained in:
Martin Wickham 2021-10-01 12:45:46 -05:00
parent 53a36eacfa
commit 01e08c92b3

View File

@ -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);