diff options
| author | Matthew Lugg <mlugg@mlugg.co.uk> | 2024-03-14 17:45:21 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-03-14 17:45:21 +0000 |
| commit | 39459e78ad0d55ada373f9368d173040dd68d837 (patch) | |
| tree | 88efd4a5d646f6fb51515d1798ba52c0c7d62b54 /src/InternPool.zig | |
| parent | 5c8eda36d6de6e9858a7527af3a1e9851969189e (diff) | |
| parent | 7c3237019454a6009d96eca31f36a1d9e6ce02aa (diff) | |
| download | zig-39459e78ad0d55ada373f9368d173040dd68d837.tar.gz zig-39459e78ad0d55ada373f9368d173040dd68d837.zip | |
Merge pull request #19273 from mlugg/incremental-some-more
compiler: more progress on incremental
Diffstat (limited to 'src/InternPool.zig')
| -rw-r--r-- | src/InternPool.zig | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/src/InternPool.zig b/src/InternPool.zig index 64da7fc043..832927071e 100644 --- a/src/InternPool.zig +++ b/src/InternPool.zig @@ -67,6 +67,9 @@ src_hash_deps: std.AutoArrayHashMapUnmanaged(TrackedInst.Index, DepEntry.Index) /// Dependencies on the value of a Decl. /// Value is index into `dep_entries` of the first dependency on this Decl value. decl_val_deps: std.AutoArrayHashMapUnmanaged(DeclIndex, DepEntry.Index) = .{}, +/// Dependencies on the IES of a runtime function. +/// Value is index into `dep_entries` of the first dependency on this Decl value. +func_ies_deps: std.AutoArrayHashMapUnmanaged(Index, DepEntry.Index) = .{}, /// Dependencies on the full set of names in a ZIR namespace. /// Key refers to a `struct_decl`, `union_decl`, etc. /// Value is index into `dep_entries` of the first dependency on this namespace. @@ -167,6 +170,7 @@ pub const Depender = enum(u32) { pub const Dependee = union(enum) { src_hash: TrackedInst.Index, decl_val: DeclIndex, + func_ies: Index, namespace: TrackedInst.Index, namespace_name: NamespaceNameKey, }; @@ -212,6 +216,7 @@ pub fn dependencyIterator(ip: *const InternPool, dependee: Dependee) DependencyI const first_entry = switch (dependee) { .src_hash => |x| ip.src_hash_deps.get(x), .decl_val => |x| ip.decl_val_deps.get(x), + .func_ies => |x| ip.func_ies_deps.get(x), .namespace => |x| ip.namespace_deps.get(x), .namespace_name => |x| ip.namespace_name_deps.get(x), } orelse return .{ @@ -251,6 +256,7 @@ pub fn addDependency(ip: *InternPool, gpa: Allocator, depender: Depender, depend const gop = try switch (tag) { .src_hash => ip.src_hash_deps, .decl_val => ip.decl_val_deps, + .func_ies => ip.func_ies_deps, .namespace => ip.namespace_deps, .namespace_name => ip.namespace_name_deps, }.getOrPut(gpa, dependee_payload); @@ -4324,6 +4330,7 @@ pub fn deinit(ip: *InternPool, gpa: Allocator) void { ip.src_hash_deps.deinit(gpa); ip.decl_val_deps.deinit(gpa); + ip.func_ies_deps.deinit(gpa); ip.namespace_deps.deinit(gpa); ip.namespace_name_deps.deinit(gpa); @@ -7103,7 +7110,7 @@ pub fn getGeneratedTagEnumType(ip: *InternPool, gpa: Allocator, ini: GeneratedTa return @enumFromInt(gop.index); } -pub const OpaqueTypeIni = struct { +pub const OpaqueTypeInit = struct { has_namespace: bool, key: union(enum) { declared: struct { @@ -7117,7 +7124,7 @@ pub const OpaqueTypeIni = struct { }, }; -pub fn getOpaqueType(ip: *InternPool, gpa: Allocator, ini: OpaqueTypeIni) Allocator.Error!WipNamespaceType.Result { +pub fn getOpaqueType(ip: *InternPool, gpa: Allocator, ini: OpaqueTypeInit) Allocator.Error!WipNamespaceType.Result { const adapter: KeyAdapter = .{ .intern_pool = ip }; const gop = try ip.map.getOrPutAdapted(gpa, Key{ .opaque_type = switch (ini.key) { .declared => |d| .{ .declared = .{ @@ -9216,7 +9223,7 @@ pub fn funcTypeParamsLen(ip: *const InternPool, i: Index) u32 { return ip.extra.items[start + std.meta.fieldIndex(Tag.TypeFunction, "params_len").?]; } -fn unwrapCoercedFunc(ip: *const InternPool, i: Index) Index { +pub fn unwrapCoercedFunc(ip: *const InternPool, i: Index) Index { const tags = ip.items.items(.tag); return switch (tags[@intFromEnum(i)]) { .func_coerced => { |
