diff options
| author | Andrew Kelley <superjoe30@gmail.com> | 2016-12-19 16:45:15 -0500 |
|---|---|---|
| committer | Andrew Kelley <superjoe30@gmail.com> | 2016-12-19 16:45:15 -0500 |
| commit | 09d50e35a4555d9af2c794390a4375c7fc0e48f7 (patch) | |
| tree | 14c3b6abf1c13eb763c31a0743a41b826e864e20 /test | |
| parent | 14422e0312b3df271bfb60e8a6233afb128354fc (diff) | |
| download | zig-09d50e35a4555d9af2c794390a4375c7fc0e48f7.tar.gz zig-09d50e35a4555d9af2c794390a4375c7fc0e48f7.zip | |
IR: support error defers
Diffstat (limited to 'test')
| -rw-r--r-- | test/cases3/defer.zig | 35 | ||||
| -rw-r--r-- | test/self_hosted3.zig | 1 |
2 files changed, 36 insertions, 0 deletions
diff --git a/test/cases3/defer.zig b/test/cases3/defer.zig new file mode 100644 index 0000000000..c6dcb586b1 --- /dev/null +++ b/test/cases3/defer.zig @@ -0,0 +1,35 @@ +var result: [3]u8 = undefined; +var index: usize = undefined; + +error FalseNotAllowed; + +fn runSomeDefers(x: bool) -> %bool { + index = 0; + defer {result[index] = 'a'; index += 1;}; + %defer {result[index] = 'b'; index += 1;}; + defer {result[index] = 'c'; index += 1;}; + return if (x) x else error.FalseNotAllowed; +} + +fn mixingNormalAndErrorDefers() { + @setFnTest(this); + + assert(%%runSomeDefers(true)); + assert(result[0] == 'c'); + assert(result[1] == 'a'); + + const ok = runSomeDefers(false) %% |err| { + assert(err == error.FalseNotAllowed); + true + }; + assert(ok); + assert(result[0] == 'c'); + assert(result[1] == 'b'); + assert(result[2] == 'a'); +} + +// TODO const assert = @import("std").debug.assert; +fn assert(ok: bool) { + if (!ok) + @unreachable(); +} diff --git a/test/self_hosted3.zig b/test/self_hosted3.zig index 8edc5ab5e9..329e8571c5 100644 --- a/test/self_hosted3.zig +++ b/test/self_hosted3.zig @@ -7,3 +7,4 @@ const test_atomics = @import("cases3/atomics.zig"); const test_for = @import("cases3/for.zig"); const test_math = @import("cases3/math.zig"); const test_generics = @import("cases3/generics.zig"); +const test_defer = @import("cases3/defer.zig"); |
