diff --git a/doc/langref.html.in b/doc/langref.html.in index cbd841e790..02e1dc4273 100644 --- a/doc/langref.html.in +++ b/doc/langref.html.in @@ -4862,14 +4862,41 @@ fn deferErrorExample(is_error: bool) !void { 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) { 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" { deferErrorExample(false) catch {}; deferErrorExample(true) catch {}; + deferErrorCaptureExample() catch {}; } {#code_end#} {#see_also|Errors#} @@ -11930,7 +11957,7 @@ fn readU32Be() u32 {}
{#syntax#}errdefer{#endsyntax#}