diff --git a/examples/235-multi-value-failable.sx b/examples/235-multi-value-failable.sx index ab7de90..15d0b73 100644 --- a/examples/235-multi-value-failable.sx +++ b/examples/235-multi-value-failable.sx @@ -30,6 +30,16 @@ safe :: (n: s32) -> s32 { return v + b; } +// Multi-value `catch` match-body — per-tag dispatch, each arm a value-tuple. +classify :: (n: s32) -> s32 { + v, b := parse(n) catch e == { + case .Bad: (1, 1); + case .Empty: (2, 2); + else: (9, 9); + }; + return v + b; +} + // Multi-value `or (tuple)` value-terminator (absorbs the failure). ortest :: (n: s32) -> s32 { v, b := parse(n) or (7, 8); @@ -57,8 +67,10 @@ main :: () -> s32 { r = r + safe(5); // (10, 6) → 16 r = r + safe(-1); // Bad → catch → (40, 50) → 90 + r = r + classify(-1); // Bad → match-body → (1, 1) → 2 + r = r + classify(0); // Empty → match-body → (2, 2) → 4 r = r + ortest(0); // Empty → or → (7, 8) → 15 - print("multi-value result: {}\n", r); // 16+4+18+5+16+90+15 = 164 + print("multi-value result: {}\n", r); // 16+4+18+5+16+90+2+4+15 = 170 return r; } diff --git a/tests/expected/235-multi-value-failable.exit b/tests/expected/235-multi-value-failable.exit index 4e9bdff..2cd1cfa 100644 --- a/tests/expected/235-multi-value-failable.exit +++ b/tests/expected/235-multi-value-failable.exit @@ -1 +1 @@ -164 +170 diff --git a/tests/expected/235-multi-value-failable.txt b/tests/expected/235-multi-value-failable.txt index 26a704e..b000221 100644 --- a/tests/expected/235-multi-value-failable.txt +++ b/tests/expected/235-multi-value-failable.txt @@ -1 +1 @@ -multi-value result: 164 +multi-value result: 170