authorgravatar for aleksey.kladov@gmail.comAlex Kladov <aleksey.kladov@gmail.com> 2024-06-28 13:32:56+01:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2024-07-21 01:26:21-07:00
log82679297422d02039c992cc223f5cfbf6fcd8675
tree4e6a1a0204638b4cc67ae872731ad1a45c02848d
parentaa73bb6bc969ef053a8fab265da8bf28e024b2d2

langref: add example for errdefer |err| sytnax


2 files changed, 23 insertions(+), 0 deletions(-)

doc/langref.html.in+4
...@@ -2992,6 +2992,10 @@ fn createFoo(param: i32) !Foo {...@@ -2992,6 +2992,10 @@ fn createFoo(param: i32) !Foo {
2992 the verbosity and cognitive overhead of trying to make sure every exit path2992 the verbosity and cognitive overhead of trying to make sure every exit path
2993 is covered. The deallocation code is always directly following the allocation code.2993 is covered. The deallocation code is always directly following the allocation code.
2994 </p>2994 </p>
2995 <p>
2996 The {#syntax#}errdefer{#endsyntax#} statement can optionally capture the error:
2997 </p>
2998 {#code|test_errdefer_capture.zig#}
2995 {#header_close#}2999 {#header_close#}
2996 {#header_open|Common errdefer Slip-Ups#}3000 {#header_open|Common errdefer Slip-Ups#}
2997 <p>3001 <p>
doc/langref/test_errdefer_capture.zig created+19
...@@ -0,0 +1,19 @@
1const std = @import("std");
2
3fn captureError(captured: *?anyerror) !void {
4 errdefer |err| {
5 captured.* = err;
6 }
7 return error.GeneralFailure;
8}
9
10test "errdefer capture" {
11 var captured: ?anyerror = null;
12
13 if (captureError(&captured)) unreachable else |err| {
14 try std.testing.expectEqual(error.GeneralFailure, captured.?);
15 try std.testing.expectEqual(error.GeneralFailure, err);
16 }
17}
18
19// test