authorgravatar for spexguy070@gmail.comMartin Wickham <spexguy070@gmail.com> 2021-10-01 12:45:46-05:00
committergravatar for spexguy070@gmail.comMartin Wickham <spexguy070@gmail.com> 2021-10-02 15:21:49-05:00
log01e08c92b3d1a7895762e7b8f8a7913d08c3fa6c
tree66872b2d6b5f03bdfb450d5184a6cf76020e751b
parent53a36eacfa145244902e9230243c76892d141b03

Revert collateral changes, clarify abortAnonDecl()


1 files changed, 13 insertions(+), 10 deletions(-)

src/Module.zig+13-10
...@@ -617,15 +617,17 @@ pub const Decl = struct {...@@ -617,15 +617,17 @@ 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: *const Decl, writer: anytype) @TypeOf(writer).Error!void {620 pub fn renderFullyQualifiedName(decl: Decl, writer: anytype) !void {
621 return try decl.src_namespace.renderFullyQualifiedName(mem.spanZ(decl.name), writer);621 const unqualified_name = mem.spanZ(decl.name);
622 return decl.src_namespace.renderFullyQualifiedName(unqualified_name, writer);
622 }623 }
623624
624 pub fn renderFullyQualifiedDebugName(decl: *const Decl, writer: anytype) @TypeOf(writer).Error!void {625 pub fn renderFullyQualifiedDebugName(decl: Decl, writer: anytype) !void {
625 return try decl.src_namespace.renderFullyQualifiedDebugName(mem.spanZ(decl.name), writer);626 const unqualified_name = mem.spanZ(decl.name);
627 return decl.src_namespace.renderFullyQualifiedDebugName(unqualified_name, writer);
626 }628 }
627629
628 pub fn getFullyQualifiedName(decl: *const Decl, gpa: *Allocator) ![:0]u8 {630 pub fn getFullyQualifiedName(decl: Decl, gpa: *Allocator) ![:0]u8 {
629 var buffer = std.ArrayList(u8).init(gpa);631 var buffer = std.ArrayList(u8).init(gpa);
630 defer buffer.deinit();632 defer buffer.deinit();
631 try decl.renderFullyQualifiedName(buffer.writer());633 try decl.renderFullyQualifiedName(buffer.writer());
...@@ -1246,7 +1248,7 @@ pub const Scope = struct {...@@ -1246,7 +1248,7 @@ pub const Scope = struct {
1246 }1248 }
1247 }1249 }
12481250
1249 // This renders e.g. "std.fs:Dir.OpenOptions"1251 /// This renders e.g. "std/fs.zig:Dir.OpenOptions"
1250 pub fn renderFullyQualifiedDebugName(1252 pub fn renderFullyQualifiedDebugName(
1251 ns: Namespace,1253 ns: Namespace,
1252 name: []const u8,1254 name: []const u8,
...@@ -4055,16 +4057,17 @@ pub fn deleteUnusedDecl(mod: *Module, decl: *Decl) void {...@@ -4055,16 +4057,17 @@ pub fn deleteUnusedDecl(mod: *Module, decl: *Decl) void {
4055 decl.destroy(mod);4057 decl.destroy(mod);
4056}4058}
40574059
4060/// Cancel the creation of an anon decl and delete any references to it.
4061/// If other decls depend on this decl, they must be aborted first.
4058pub fn abortAnonDecl(mod: *Module, decl: *Decl) void {4062pub fn abortAnonDecl(mod: *Module, decl: *Decl) void {
4059 log.debug("abortAnonDecl {*} ({s})", .{ decl, decl.name });4063 log.debug("abortAnonDecl {*} ({s})", .{ decl, decl.name });
40604064
4061 assert(!decl.isRoot());4065 assert(!decl.isRoot());
4062 assert(decl.src_namespace.anon_decls.swapRemove(decl));4066 assert(decl.src_namespace.anon_decls.swapRemove(decl));
40634067
4064 const dependants = decl.dependants.keys();4068 // An aborted decl must not have dependants -- they must have
4065 for (dependants) |dep| {4069 // been aborted first and removed from this list.
4066 dep.removeDependency(decl);4070 assert(decl.dependants.count() == 0);
4067 }
40684071
4069 for (decl.dependencies.keys()) |dep| {4072 for (decl.dependencies.keys()) |dep| {
4070 dep.removeDependant(decl);4073 dep.removeDependant(decl);