aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorAndrew Kelley <superjoe30@gmail.com>2016-12-19 17:25:09 -0500
committerAndrew Kelley <superjoe30@gmail.com>2016-12-19 17:25:09 -0500
commit2419f0c91436106f85ea8b6ec183cdaea438a1d0 (patch)
tree18c4d72142c50137fff9ace7f8a2139ed2ff6aec /test
parent09d50e35a4555d9af2c794390a4375c7fc0e48f7 (diff)
downloadzig-2419f0c91436106f85ea8b6ec183cdaea438a1d0.tar.gz
zig-2419f0c91436106f85ea8b6ec183cdaea438a1d0.zip
IR: support maybe defers
Diffstat (limited to 'test')
-rw-r--r--test/cases3/defer.zig28
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)