Commit 8267929742

Alex Kladov <aleksey.kladov@gmail.com>
2024-06-28 14:32:56
langref: add example for errdefer |err| sytnax
1 parent aa73bb6
Changed files (2)
doc/langref/test_errdefer_capture.zig
@@ -0,0 +1,19 @@
+const std = @import("std");
+
+fn captureError(captured: *?anyerror) !void {
+    errdefer |err| {
+        captured.* = err;
+    }
+    return error.GeneralFailure;
+}
+
+test "errdefer capture" {
+    var captured: ?anyerror = null;
+
+    if (captureError(&captured)) unreachable else |err| {
+        try std.testing.expectEqual(error.GeneralFailure, captured.?);
+        try std.testing.expectEqual(error.GeneralFailure, err);
+    }
+}
+
+// test
doc/langref.html.in
@@ -2992,6 +2992,10 @@ fn createFoo(param: i32) !Foo {
       the verbosity and cognitive overhead of trying to make sure every exit path
       is covered. The deallocation code is always directly following the allocation code.
       </p>
+      <p>
+      The {#syntax#}errdefer{#endsyntax#} statement can optionally capture the error:
+      </p>
+      {#code|test_errdefer_capture.zig#}
       {#header_close#}
       {#header_open|Common errdefer Slip-Ups#}
       <p>