dimdin/zig-recover
zig panic recover
Recover calls a function and regains control of the calling thread when the function panics or behaves undefined. Recover is licensed under the terms of the MIT License.
Recover call
, calls function
with args
, if the function does not panic,
will return the called function's return value. If the function panics, will
return error.Panic
.
const recover = @import("recover");
try recover.call(function, args);
Enabled runtime safety checks, such as unreachable, index out of bounds, overflow, division by zero, incorrect pointer alignment, etc.
In the root source file define panic as recover.panic or override the default panic handler and call recover
panicked
.
pub const panic = recover.panic;
Returns error.Panic because function division panics with runtime error "division by zero".
fn division(num: u32, den: u32) u32 {
return num / den;
}
try recover.call(division, .{1, 0});
For recover to work for testing, you need a custom test runner with a panic handler:
pub const panic = @import("recover").panic;
To test that foo(0)
panics:
test "foo(0) panics" {
const err = recover.call(foo, .{0});
std.testing.expectError(error.Panic, err).
}