diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2024-05-28 19:27:14 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-05-28 19:27:14 -0400 |
| commit | 963ffe9d572e6da4ef22672af9b7c54150f66b27 (patch) | |
| tree | 950c39722d71cdd6f2af75c255ee92a318cda516 /src/Module.zig | |
| parent | 759c2211c2eba44cccf0608267bf1a05934ad8a1 (diff) | |
| parent | 3a3d2187f986066859cfb793fb7ee1cae4dfea08 (diff) | |
| download | zig-963ffe9d572e6da4ef22672af9b7c54150f66b27.tar.gz zig-963ffe9d572e6da4ef22672af9b7c54150f66b27.zip | |
Merge pull request #20059 from ziglang/progress
rework std.Progress
Diffstat (limited to 'src/Module.zig')
| -rw-r--r-- | src/Module.zig | 39 |
1 files changed, 28 insertions, 11 deletions
diff --git a/src/Module.zig b/src/Module.zig index c571c851fe..ef410fad4e 100644 --- a/src/Module.zig +++ b/src/Module.zig @@ -66,6 +66,7 @@ root_mod: *Package.Module, main_mod: *Package.Module, std_mod: *Package.Module, sema_prog_node: std.Progress.Node = undefined, +codegen_prog_node: std.Progress.Node = undefined, /// Used by AstGen worker to load and store ZIR cache. global_zir_cache: Compilation.Directory, @@ -2942,11 +2943,12 @@ pub fn ensureDeclAnalyzed(mod: *Module, decl_index: Decl.Index) SemaError!void { const tracy = trace(@src()); defer tracy.end(); + const ip = &mod.intern_pool; const decl = mod.declPtr(decl_index); log.debug("ensureDeclAnalyzed '{d}' (name '{}')", .{ @intFromEnum(decl_index), - decl.name.fmt(&mod.intern_pool), + decl.name.fmt(ip), }); // Determine whether or not this Decl is outdated, i.e. requires re-analysis @@ -2991,10 +2993,6 @@ pub fn ensureDeclAnalyzed(mod: *Module, decl_index: Decl.Index) SemaError!void { try mod.deleteDeclExports(decl_index); } - var decl_prog_node = mod.sema_prog_node.start("", 0); - decl_prog_node.activate(); - defer decl_prog_node.end(); - const sema_result: SemaDeclResult = blk: { if (decl.zir_decl_index == .none and !mod.declIsRoot(decl_index)) { // Anonymous decl. We don't semantically analyze these. @@ -3012,6 +3010,9 @@ pub fn ensureDeclAnalyzed(mod: *Module, decl_index: Decl.Index) SemaError!void { }; } + const decl_prog_node = mod.sema_prog_node.start((try decl.fullyQualifiedName(mod)).toSlice(ip), 0); + defer decl_prog_node.end(); + break :blk mod.semaDecl(decl_index) catch |err| switch (err) { error.AnalysisFail => { if (decl.analysis == .in_progress) { @@ -3215,6 +3216,9 @@ pub fn ensureFuncBodyAnalyzed(zcu: *Zcu, maybe_coerced_func_index: InternPool.In }; } + const codegen_prog_node = zcu.codegen_prog_node.start((try decl.fullyQualifiedName(zcu)).toSlice(ip), 0); + defer codegen_prog_node.end(); + if (comp.bin_file) |lf| { lf.updateFunc(zcu, func_index, air, liveness) catch |err| switch (err) { error.OutOfMemory => return error.OutOfMemory, @@ -4500,6 +4504,9 @@ pub fn analyzeFnBody(mod: *Module, func_index: InternPool.Index, arena: Allocato log.debug("finish func name '{}'", .{(decl.fullyQualifiedName(mod) catch break :blk).fmt(ip)}); } + const decl_prog_node = mod.sema_prog_node.start((try decl.fullyQualifiedName(mod)).toSlice(ip), 0); + defer decl_prog_node.end(); + mod.intern_pool.removeDependenciesForDepender(gpa, InternPool.Depender.wrap(.{ .func = func_index })); var comptime_err_ret_trace = std.ArrayList(SrcLoc).init(gpa); @@ -5316,7 +5323,7 @@ fn handleUpdateExports( pub fn populateTestFunctions( mod: *Module, - main_progress_node: *std.Progress.Node, + main_progress_node: std.Progress.Node, ) !void { const gpa = mod.gpa; const ip = &mod.intern_pool; @@ -5333,13 +5340,13 @@ pub fn populateTestFunctions( // We have to call `ensureDeclAnalyzed` here in case `builtin.test_functions` // was not referenced by start code. mod.sema_prog_node = main_progress_node.start("Semantic Analysis", 0); - mod.sema_prog_node.activate(); defer { mod.sema_prog_node.end(); mod.sema_prog_node = undefined; } try mod.ensureDeclAnalyzed(decl_index); } + const decl = mod.declPtr(decl_index); const test_fn_ty = decl.typeOf(mod).slicePtrFieldType(mod).childType(mod); @@ -5440,21 +5447,32 @@ pub fn populateTestFunctions( decl.val = new_val; decl.has_tv = true; } - try mod.linkerUpdateDecl(decl_index); + { + mod.codegen_prog_node = main_progress_node.start("Code Generation", 0); + defer { + mod.codegen_prog_node.end(); + mod.codegen_prog_node = undefined; + } + + try mod.linkerUpdateDecl(decl_index); + } } pub fn linkerUpdateDecl(zcu: *Zcu, decl_index: Decl.Index) !void { const comp = zcu.comp; + const decl = zcu.declPtr(decl_index); + + const codegen_prog_node = zcu.codegen_prog_node.start((try decl.fullyQualifiedName(zcu)).toSlice(&zcu.intern_pool), 0); + defer codegen_prog_node.end(); + if (comp.bin_file) |lf| { lf.updateDecl(zcu, decl_index) catch |err| switch (err) { error.OutOfMemory => return error.OutOfMemory, error.AnalysisFail => { - const decl = zcu.declPtr(decl_index); decl.analysis = .codegen_failure; }, else => { - const decl = zcu.declPtr(decl_index); const gpa = zcu.gpa; try zcu.failed_decls.ensureUnusedCapacity(gpa, 1); zcu.failed_decls.putAssumeCapacityNoClobber(decl_index, try ErrorMsg.create( @@ -5472,7 +5490,6 @@ pub fn linkerUpdateDecl(zcu: *Zcu, decl_index: Decl.Index) !void { llvm_object.updateDecl(zcu, decl_index) catch |err| switch (err) { error.OutOfMemory => return error.OutOfMemory, error.AnalysisFail => { - const decl = zcu.declPtr(decl_index); decl.analysis = .codegen_failure; }, }; |
