Skip to content

Commit

Permalink
langref: mention error union switch peer resolution
Browse files Browse the repository at this point in the history
  • Loading branch information
dweiller committed Dec 8, 2023
1 parent 1f57320 commit 815b4d4
Showing 1 changed file with 26 additions and 0 deletions.
26 changes: 26 additions & 0 deletions doc/langref.html.in
Original file line number Diff line number Diff line change
Expand Up @@ -6804,6 +6804,32 @@ test "peer type resolution: *const T and ?*T" {
try expect(a == b);
try expect(b == a);
}

test "peer type resolution: error union switch" {
// The non-error and error cases are only peers if the error case is only a switch expression;
// the pattern `if (x) {...} else |err| blk: { switch (err) {...} }` does not consider the
// non-error and error case to be peers.
var a: error{ A, B, C }!u32 = 0;
_ = &a;
const b = if (a) |x|
x + 3
else |err| switch (err) {
error.A => 0,
error.B => 1,
error.C => null,
};
try expect(@TypeOf(b) == ?u32);

// The non-error and error cases are only peers if the error case is only a switch expression;
// the pattern `x catch |err| blk: { switch (err) {...} }` does not consider the unwrapped `x`
// and error case to be peers.
const c = a catch |err| switch (err) {
error.A => 0,
error.B => 1,
error.C => null,
};
try expect(@TypeOf(c) == ?u32);
}
{#code_end#}
{#header_close#}
{#header_close#}
Expand Down

0 comments on commit 815b4d4

Please sign in to comment.