aboutsummaryrefslogtreecommitdiff
path: root/src/codegen.zig
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2024-07-04 14:16:42 -0700
committerAndrew Kelley <andrew@ziglang.org>2024-07-04 17:51:35 -0700
commit30ec43a6c78d9c8803becbea5a02edb8fae08af6 (patch)
treefd827ce826b593a18c128d019eb9adffb3c2ca26 /src/codegen.zig
parent7ed2fbd7559ceb69ab03a8985fd7e5b591e22ab7 (diff)
downloadzig-30ec43a6c78d9c8803becbea5a02edb8fae08af6.tar.gz
zig-30ec43a6c78d9c8803becbea5a02edb8fae08af6.zip
Zcu: extract permanent state from File
Primarily, this commit removes 2 fields from File, relying on the data being stored in the `files` field, with the key as the path digest, and the value as the struct decl corresponding to the File. This table is serialized into the compiler state that survives between incremental updates. Meanwhile, the File struct remains ephemeral data that can be reconstructed the first time it is needed by the compiler process, as well as operated on by independent worker threads. A key outcome of this commit is that there is now a stable index that can be used to refer to a File. This will be needed when serializing error messages to survive incremental compilation updates.
Diffstat (limited to 'src/codegen.zig')
-rw-r--r--src/codegen.zig12
1 files changed, 6 insertions, 6 deletions
diff --git a/src/codegen.zig b/src/codegen.zig
index 5e25359d44..059b4fa7d4 100644
--- a/src/codegen.zig
+++ b/src/codegen.zig
@@ -58,7 +58,7 @@ pub fn generateFunction(
const func = zcu.funcInfo(func_index);
const decl = zcu.declPtr(func.owner_decl);
const namespace = zcu.namespacePtr(decl.src_namespace);
- const target = namespace.file_scope.mod.resolved_target.result;
+ const target = namespace.fileScope(zcu).mod.resolved_target.result;
switch (target.cpu.arch) {
.arm,
.armeb,
@@ -88,7 +88,7 @@ pub fn generateLazyFunction(
const decl_index = lazy_sym.ty.getOwnerDecl(zcu);
const decl = zcu.declPtr(decl_index);
const namespace = zcu.namespacePtr(decl.src_namespace);
- const target = namespace.file_scope.mod.resolved_target.result;
+ const target = namespace.fileScope(zcu).mod.resolved_target.result;
switch (target.cpu.arch) {
.x86_64 => return @import("arch/x86_64/CodeGen.zig").generateLazy(lf, src_loc, lazy_sym, code, debug_output),
else => unreachable,
@@ -742,7 +742,7 @@ fn lowerDeclRef(
const zcu = lf.comp.module.?;
const decl = zcu.declPtr(decl_index);
const namespace = zcu.namespacePtr(decl.src_namespace);
- const target = namespace.file_scope.mod.resolved_target.result;
+ const target = namespace.fileScope(zcu).mod.resolved_target.result;
const ptr_width = target.ptrBitWidth();
const is_fn_body = decl.typeOf(zcu).zigTypeTag(zcu) == .Fn;
@@ -836,7 +836,7 @@ fn genDeclRef(
const ptr_decl = zcu.declPtr(ptr_decl_index);
const namespace = zcu.namespacePtr(ptr_decl.src_namespace);
- const target = namespace.file_scope.mod.resolved_target.result;
+ const target = namespace.fileScope(zcu).mod.resolved_target.result;
const ptr_bits = target.ptrBitWidth();
const ptr_bytes: u64 = @divExact(ptr_bits, 8);
@@ -875,7 +875,7 @@ fn genDeclRef(
}
const decl_namespace = zcu.namespacePtr(decl.src_namespace);
- const single_threaded = decl_namespace.file_scope.mod.single_threaded;
+ const single_threaded = decl_namespace.fileScope(zcu).mod.single_threaded;
const is_threadlocal = val.isPtrToThreadLocal(zcu) and !single_threaded;
const is_extern = decl.isExtern(zcu);
@@ -985,7 +985,7 @@ pub fn genTypedValue(
const owner_decl = zcu.declPtr(owner_decl_index);
const namespace = zcu.namespacePtr(owner_decl.src_namespace);
- const target = namespace.file_scope.mod.resolved_target.result;
+ const target = namespace.fileScope(zcu).mod.resolved_target.result;
const ptr_bits = target.ptrBitWidth();
if (!ty.isSlice(zcu)) switch (ip.indexToKey(val.toIntern())) {