aboutsummaryrefslogtreecommitdiff
path: root/src/Compilation.zig
diff options
context:
space:
mode:
authormlugg <mlugg@mlugg.co.uk>2024-02-02 03:19:23 +0000
committermlugg <mlugg@mlugg.co.uk>2024-02-04 18:38:39 +0000
commit7f4bd247c7735ccf277c9bba42222e014cacf856 (patch)
treeb47acb0631fc101995b03dd415efe587cec9738b /src/Compilation.zig
parenta1b607acb5c1e9dd03760efd7078185e7628b29d (diff)
downloadzig-7f4bd247c7735ccf277c9bba42222e014cacf856.tar.gz
zig-7f4bd247c7735ccf277c9bba42222e014cacf856.zip
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.
Diffstat (limited to 'src/Compilation.zig')
-rw-r--r--src/Compilation.zig30
1 files changed, 29 insertions, 1 deletions
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