Commit 089c056dbe

Noam Preil <pleasantatk@gmail.com>
2020-07-08 05:24:30
CBE: Improve resource cleanup
1 parent 7a61049
Changed files (2)
src-self-hosted
src-self-hosted/link.zig
@@ -159,6 +159,22 @@ pub const File = struct {
         }
     }
 
+    pub fn destroy(base: *File) void {
+        switch (base.tag) {
+            .Elf => {
+                const parent = @fieldParentPtr(Elf, "base", base);
+                parent.deinit();
+                parent.allocator.destroy(parent);
+            },
+            .C => {
+                const parent = @fieldParentPtr(C, "base", base);
+                parent.deinit();
+                parent.allocator.destroy(parent);
+            },
+            else => unreachable,
+        }
+    }
+
     pub fn flush(base: *File) !void {
         try switch (base.tag) {
             .Elf => @fieldParentPtr(Elf, "base", base).flush(),
src-self-hosted/Module.zig
@@ -744,7 +744,7 @@ pub fn init(gpa: *Allocator, options: InitOptions) !Module {
         .object_format = options.object_format orelse options.target.getObjectFormat(),
         .cbe = options.cbe,
     });
-    errdefer bin_file.*.deinit();
+    errdefer bin_file.destroy();
 
     const root_scope = blk: {
         if (mem.endsWith(u8, options.root_pkg.root_src_path, ".zig")) {
@@ -793,9 +793,8 @@ pub fn init(gpa: *Allocator, options: InitOptions) !Module {
 }
 
 pub fn deinit(self: *Module) void {
-    self.bin_file.deinit();
+    self.bin_file.destroy();
     const allocator = self.allocator;
-    allocator.destroy(self.bin_file);
     self.deletion_set.deinit(allocator);
     self.work_queue.deinit();