aboutsummaryrefslogtreecommitdiff
path: root/src/Module.zig
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2021-07-08 02:04:53 -0400
committerGitHub <noreply@github.com>2021-07-08 02:04:53 -0400
commit62d27fcfb687e3ab1f10c72513e19529d8ffceed (patch)
tree2885da99ca325959e40f417346aca63ddef4fb31 /src/Module.zig
parent7935e83b1d5d29cca058597ebdac6dfd012a790a (diff)
parentc2e66d9bab396a69514ec7c3c41fb0404e542f21 (diff)
downloadzig-62d27fcfb687e3ab1f10c72513e19529d8ffceed.tar.gz
zig-62d27fcfb687e3ab1f10c72513e19529d8ffceed.zip
Merge pull request #9325 from ziglang/stage2-inferred-error-sets
Stage2 inferred error sets and `@panic`
Diffstat (limited to 'src/Module.zig')
-rw-r--r--src/Module.zig19
1 files changed, 17 insertions, 2 deletions
diff --git a/src/Module.zig b/src/Module.zig
index 1d715448da..8ae184a377 100644
--- a/src/Module.zig
+++ b/src/Module.zig
@@ -755,6 +755,7 @@ pub const Fn = struct {
rbrace_column: u16,
state: Analysis,
+ is_cold: bool = false,
pub const Analysis = enum {
queued,
@@ -776,8 +777,19 @@ pub const Fn = struct {
}
pub fn deinit(func: *Fn, gpa: *Allocator) void {
- _ = func;
- _ = gpa;
+ if (func.getInferredErrorSet()) |map| {
+ map.deinit(gpa);
+ }
+ }
+
+ pub fn getInferredErrorSet(func: *Fn) ?*std.StringHashMapUnmanaged(void) {
+ const ret_ty = func.owner_decl.ty.fnReturnType();
+ if (ret_ty.zigTypeTag() == .ErrorUnion) {
+ if (ret_ty.errorUnionSet().castTag(.error_set_inferred)) |payload| {
+ return &payload.data.map;
+ }
+ }
+ return null;
}
};
@@ -3453,6 +3465,9 @@ pub fn clearDecl(
for (decl.dependencies.keys()) |dep| {
dep.removeDependant(decl);
if (dep.dependants.count() == 0 and !dep.deletion_flag) {
+ log.debug("insert {*} ({s}) dependant {*} ({s}) into deletion set", .{
+ decl, decl.name, dep, dep.name,
+ });
// We don't recursively perform a deletion here, because during the update,
// another reference to it may turn up.
dep.deletion_flag = true;