diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2020-05-19 13:56:06 -0400 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2020-05-19 13:56:06 -0400 |
| commit | ed137d25ef0fb94f2ea0db4f993a0adfcaf63b58 (patch) | |
| tree | 089289335a3e6374c88ccb54c5879806132503a6 /src-self-hosted/Module.zig | |
| parent | 1cde0edff469fbe5ee62cb10a44161b4c9910f98 (diff) | |
| parent | 8d3cca7fc2e7b34486cc56951bb0dadb75e498a0 (diff) | |
| download | zig-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.zig | 17 |
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 }; |
