authorgravatar for noam@pixelhero.devNoam Preil <noam@pixelhero.dev> 2020-06-26 03:15:12-04:00
committergravatar for noam@pixelhero.devNoam Preil <noam@pixelhero.dev> 2020-06-26 03:16:36-04:00
loge5a3cb8d7134d7c4e4db03a609c5b7b6de00edfc
treef48b57b37c6d1c0baa4b49d5b16615dd0c88928d
parent53fead580eb2abc2813d70b794239c4629324159
signature Commit is signed but in an unrecognized format.

Stage2: fix incremental compilation after error


1 files changed, 28 insertions(+), 0 deletions(-)

src-self-hosted/Module.zig+28
......@@ -851,6 +851,8 @@ pub fn update(self: *Module) !void {
851851
852852 self.generation += 1;
853853
854 self.clearErrors();
855
854856 // TODO Use the cache hash file system to detect which source files changed.
855857 // Until then we simulate a full cache miss. Source files could have been loaded for any reason;
856858 // to force a refresh we unload now.
......@@ -914,6 +916,31 @@ pub fn totalErrorCount(self: *Module) usize {
914916 return if (total == 0) @boolToInt(self.link_error_flags.no_entry_point_found) else total;
915917}
916918
919pub fn clearErrors(self: *Module) void {
920 const allocator = self.allocator;
921 {
922 var it = self.failed_decls.iterator();
923 while (it.next()) |kv| {
924 kv.value.destroy(allocator);
925 }
926 self.failed_decls.clear();
927 }
928 {
929 var it = self.failed_files.iterator();
930 while (it.next()) |kv| {
931 kv.value.destroy(allocator);
932 }
933 self.failed_files.clear();
934 }
935 {
936 var it = self.failed_exports.iterator();
937 while (it.next()) |kv| {
938 kv.value.destroy(allocator);
939 }
940 self.failed_exports.clear();
941 }
942}
943
917944pub fn getAllErrorsAlloc(self: *Module) !AllErrors {
918945 var arena = std.heap.ArenaAllocator.init(self.allocator);
919946 errdefer arena.deinit();
......@@ -2092,6 +2119,7 @@ fn analyzeExport(self: *Module, scope: *Scope, src: usize, symbol_name: []const
20922119 .Fn => {},
20932120 else => return self.fail(scope, src, "unable to export type '{}'", .{typed_value.ty}),
20942121 }
2122
20952123 try self.decl_exports.ensureCapacity(self.decl_exports.size + 1);
20962124 try self.export_owners.ensureCapacity(self.export_owners.size + 1);
20972125