about summary refs log tree commit diff
path: root/lang/zig/error-trace.zig
diff options
context:
space:
mode:
Diffstat (limited to 'lang/zig/error-trace.zig')
-rw-r--r--lang/zig/error-trace.zig44
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;
+}