diff options
Diffstat (limited to 'lang/zig/error-trace.zig')
-rw-r--r-- | lang/zig/error-trace.zig | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/lang/zig/error-trace.zig b/lang/zig/error-trace.zig new file mode 100644 index 0000000..822f235 --- /dev/null +++ b/lang/zig/error-trace.zig @@ -0,0 +1,44 @@ +test "error return traces" { + try foo(12); +} + +fn foo(x: i32) !void { + if (x >= 5) { + try bar(); + } else { + try bang2(); + } +} + +fn bar() !void { + if (baz()) { + try quux(); + } else |err| switch (err) { + error.FileNotFound => try hello(), + else => try another(), + } +} + +fn baz() !void { + try bang1(); +} + +fn quux() !void { + try bang2(); +} + +fn hello() !void { + try bang2(); +} + +fn another() !void { + try bang1(); +} + +fn bang1() !void { + return error.FileNotFound; +} + +fn bang2() !void { + return error.PermissionDenied; +} |