Merge pull request #11664 from vincenzopalazzo/macros/docs

docs: add missed docs for some language feature like `defer` and `errdefer`
This commit is contained in:
Andrew Kelley 2022-09-14 19:26:28 -04:00 committed by GitHub
commit 1d041d3a10
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -4862,14 +4862,41 @@ fn deferErrorExample(is_error: bool) !void {
print("encountered an error!\n", .{}); print("encountered an error!\n", .{});
} }
// inside a defer method the return statement
// is not allowed.
// The following lines produce the following
// error if uncomment
// ```
// defer.zig:73:9: error: cannot return from defer expression
// return error.DeferError;
// ```
//
//defer {
// return error.DeferError;
//}
if (is_error) { if (is_error) {
return error.DeferError; return error.DeferError;
} }
} }
// The errdefer keyword support also an alternative syntax to capture the
// error generated in case of one error.
//
// This is useful when during the clean up after an error additional
// message want to be printed.
fn deferErrorCaptureExample() !void {
errdefer |err| {
std.debug.print("the error is {s}\n", .{@errorName(err)});
}
return error.DeferError;
}
test "errdefer unwinding" { test "errdefer unwinding" {
deferErrorExample(false) catch {}; deferErrorExample(false) catch {};
deferErrorExample(true) catch {}; deferErrorExample(true) catch {};
deferErrorCaptureExample() catch {};
} }
{#code_end#} {#code_end#}
{#see_also|Errors#} {#see_also|Errors#}
@ -11930,7 +11957,7 @@ fn readU32Be() u32 {}
<pre>{#syntax#}errdefer{#endsyntax#}</pre> <pre>{#syntax#}errdefer{#endsyntax#}</pre>
</th> </th>
<td> <td>
{#syntax#}errdefer{#endsyntax#} will execute an expression when control flow leaves the current block if the function returns an error. {#syntax#}errdefer{#endsyntax#} will execute an expression when control flow leaves the current block if the function returns an error, the errdefer expression can capture the unwrapped value.
<ul> <ul>
<li>See also {#link|errdefer#}</li> <li>See also {#link|errdefer#}</li>
</ul> </ul>