From 7f4bd247c7735ccf277c9bba42222e014cacf856 Mon Sep 17 00:00:00 2001 From: mlugg Date: Fri, 2 Feb 2024 03:19:23 +0000 Subject: compiler: re-introduce dependencies for incremental compilation Sema now tracks dependencies appropriately. Early logic in Zcu for resolving outdated decls/functions is in place. The setup used does not support `usingnamespace`; compilations using this construct are not yet supported by this incremental compilation model. --- src/Compilation.zig | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) (limited to 'src/Compilation.zig') diff --git a/src/Compilation.zig b/src/Compilation.zig index e837004779..5ee62692fe 100644 --- a/src/Compilation.zig +++ b/src/Compilation.zig @@ -2807,6 +2807,13 @@ const Header = extern struct { limbs_len: u32, string_bytes_len: u32, tracked_insts_len: u32, + src_hash_deps_len: u32, + decl_val_deps_len: u32, + namespace_deps_len: u32, + namespace_name_deps_len: u32, + first_dependency_len: u32, + dep_entries_len: u32, + free_dep_entries_len: u32, }, }; @@ -2814,7 +2821,7 @@ const Header = extern struct { /// saved, such as the target and most CLI flags. A cache hit will only occur /// when subsequent compiler invocations use the same set of flags. pub fn saveState(comp: *Compilation) !void { - var bufs_list: [7]std.os.iovec_const = undefined; + var bufs_list: [19]std.os.iovec_const = undefined; var bufs_len: usize = 0; const lf = comp.bin_file orelse return; @@ -2828,6 +2835,13 @@ pub fn saveState(comp: *Compilation) !void { .limbs_len = @intCast(ip.limbs.items.len), .string_bytes_len = @intCast(ip.string_bytes.items.len), .tracked_insts_len = @intCast(ip.tracked_insts.count()), + .src_hash_deps_len = @intCast(ip.src_hash_deps.count()), + .decl_val_deps_len = @intCast(ip.decl_val_deps.count()), + .namespace_deps_len = @intCast(ip.namespace_deps.count()), + .namespace_name_deps_len = @intCast(ip.namespace_name_deps.count()), + .first_dependency_len = @intCast(ip.first_dependency.count()), + .dep_entries_len = @intCast(ip.dep_entries.items.len), + .free_dep_entries_len = @intCast(ip.free_dep_entries.items.len), }, }; addBuf(&bufs_list, &bufs_len, mem.asBytes(&header)); @@ -2838,6 +2852,20 @@ pub fn saveState(comp: *Compilation) !void { addBuf(&bufs_list, &bufs_len, ip.string_bytes.items); addBuf(&bufs_list, &bufs_len, mem.sliceAsBytes(ip.tracked_insts.keys())); + addBuf(&bufs_list, &bufs_len, mem.sliceAsBytes(ip.src_hash_deps.keys())); + addBuf(&bufs_list, &bufs_len, mem.sliceAsBytes(ip.src_hash_deps.values())); + addBuf(&bufs_list, &bufs_len, mem.sliceAsBytes(ip.decl_val_deps.keys())); + addBuf(&bufs_list, &bufs_len, mem.sliceAsBytes(ip.decl_val_deps.values())); + addBuf(&bufs_list, &bufs_len, mem.sliceAsBytes(ip.namespace_deps.keys())); + addBuf(&bufs_list, &bufs_len, mem.sliceAsBytes(ip.namespace_deps.values())); + addBuf(&bufs_list, &bufs_len, mem.sliceAsBytes(ip.namespace_name_deps.keys())); + addBuf(&bufs_list, &bufs_len, mem.sliceAsBytes(ip.namespace_name_deps.values())); + + addBuf(&bufs_list, &bufs_len, mem.sliceAsBytes(ip.first_dependency.keys())); + addBuf(&bufs_list, &bufs_len, mem.sliceAsBytes(ip.first_dependency.values())); + addBuf(&bufs_list, &bufs_len, mem.sliceAsBytes(ip.dep_entries.items)); + addBuf(&bufs_list, &bufs_len, mem.sliceAsBytes(ip.free_dep_entries.items)); + // TODO: compilation errors // TODO: files // TODO: namespaces -- cgit v1.2.3