diff options
| author | Andrew Kelley <superjoe30@gmail.com> | 2016-12-19 17:25:09 -0500 |
|---|---|---|
| committer | Andrew Kelley <superjoe30@gmail.com> | 2016-12-19 17:25:09 -0500 |
| commit | 2419f0c91436106f85ea8b6ec183cdaea438a1d0 (patch) | |
| tree | 18c4d72142c50137fff9ace7f8a2139ed2ff6aec /test | |
| parent | 09d50e35a4555d9af2c794390a4375c7fc0e48f7 (diff) | |
| download | zig-2419f0c91436106f85ea8b6ec183cdaea438a1d0.tar.gz zig-2419f0c91436106f85ea8b6ec183cdaea438a1d0.zip | |
IR: support maybe defers
Diffstat (limited to 'test')
| -rw-r--r-- | test/cases3/defer.zig | 28 |
1 files changed, 25 insertions, 3 deletions
diff --git a/test/cases3/defer.zig b/test/cases3/defer.zig index c6dcb586b1..f95ea06414 100644 --- a/test/cases3/defer.zig +++ b/test/cases3/defer.zig @@ -3,7 +3,7 @@ var index: usize = undefined; error FalseNotAllowed; -fn runSomeDefers(x: bool) -> %bool { +fn runSomeErrorDefers(x: bool) -> %bool { index = 0; defer {result[index] = 'a'; index += 1;}; %defer {result[index] = 'b'; index += 1;}; @@ -11,14 +11,22 @@ fn runSomeDefers(x: bool) -> %bool { return if (x) x else error.FalseNotAllowed; } +fn runSomeMaybeDefers(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 null; +} + fn mixingNormalAndErrorDefers() { @setFnTest(this); - assert(%%runSomeDefers(true)); + assert(%%runSomeErrorDefers(true)); assert(result[0] == 'c'); assert(result[1] == 'a'); - const ok = runSomeDefers(false) %% |err| { + const ok = runSomeErrorDefers(false) %% |err| { assert(err == error.FalseNotAllowed); true }; @@ -28,6 +36,20 @@ fn mixingNormalAndErrorDefers() { assert(result[2] == 'a'); } +fn mixingNormalAndMaybeDefers() { + @setFnTest(this); + + assert(??runSomeMaybeDefers(true)); + assert(result[0] == 'c'); + assert(result[1] == 'a'); + + const ok = runSomeMaybeDefers(false) ?? 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) |
