aboutsummaryrefslogtreecommitdiff
path: root/src-self-hosted/Module.zig
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2020-05-19 13:56:06 -0400
committerAndrew Kelley <andrew@ziglang.org>2020-05-19 13:56:06 -0400
commited137d25ef0fb94f2ea0db4f993a0adfcaf63b58 (patch)
tree089289335a3e6374c88ccb54c5879806132503a6 /src-self-hosted/Module.zig
parent1cde0edff469fbe5ee62cb10a44161b4c9910f98 (diff)
parent8d3cca7fc2e7b34486cc56951bb0dadb75e498a0 (diff)
downloadzig-ed137d25ef0fb94f2ea0db4f993a0adfcaf63b58.tar.gz
zig-ed137d25ef0fb94f2ea0db4f993a0adfcaf63b58.zip
Merge branch 'stage2-fn-calls'
Diffstat (limited to 'src-self-hosted/Module.zig')
-rw-r--r--src-self-hosted/Module.zig17
1 files changed, 8 insertions, 9 deletions
diff --git a/src-self-hosted/Module.zig b/src-self-hosted/Module.zig
index 1ff551ecbf..da826a6e95 100644
--- a/src-self-hosted/Module.zig
+++ b/src-self-hosted/Module.zig
@@ -231,6 +231,7 @@ pub const Fn = struct {
dependency_failure,
success: Body,
},
+ owner_decl: *Decl,
/// This memory is temporary and points to stack memory for the duration
/// of Fn analysis.
@@ -883,14 +884,6 @@ fn resolveDecl(
};
const arena_state = try decl_scope.arena.allocator.create(std.heap.ArenaAllocator.State);
- const has_codegen_bits = typed_value.ty.hasCodeGenBits();
- if (has_codegen_bits) {
- // We don't fully codegen the decl until later, but we do need to reserve a global
- // offset table index for it. This allows us to codegen decls out of dependency order,
- // increasing how many computations can be done in parallel.
- try self.bin_file.allocateDeclIndexes(new_decl);
- }
-
arena_state.* = decl_scope.arena.state;
new_decl.typed_value = .{
@@ -900,7 +893,12 @@ fn resolveDecl(
},
};
new_decl.analysis = .complete;
- if (has_codegen_bits) {
+ if (typed_value.ty.hasCodeGenBits()) {
+ // We don't fully codegen the decl until later, but we do need to reserve a global
+ // offset table index for it. This allows us to codegen decls out of dependency order,
+ // increasing how many computations can be done in parallel.
+ try self.bin_file.allocateDeclIndexes(new_decl);
+
// We ensureCapacity when scanning for decls.
self.work_queue.writeItemAssumeCapacity(.{ .codegen_decl = new_decl });
}
@@ -1329,6 +1327,7 @@ fn analyzeInstFn(self: *Module, scope: *Scope, fn_inst: *zir.Inst.Fn) InnerError
new_func.* = .{
.fn_type = fn_type,
.analysis = .{ .queued = fn_inst },
+ .owner_decl = scope.decl(),
};
const fn_payload = try scope.arena().create(Value.Payload.Function);
fn_payload.* = .{ .func = new_func };