From f96bcc4fe4903574b92f660303d6b8ff66485fa9 Mon Sep 17 00:00:00 2001 From: agra Date: Mon, 1 Jun 2026 00:16:39 +0300 Subject: [PATCH] ERR: use the catch match-body form in examples/235 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The preceding parser fix (parenthesized match-arm value vs payload capture) fully enables `catch e == { case .X: (tuple) }` — both scalar and tuple arm values. Tuple literals in statement/binding position already worked, so the match-body form runs end-to-end. Add a `classify` to examples/235 exercising multi-value catch match-body with per-tag value-tuple arms; exit 164 -> 170. Regenerate the snapshot. (Corrects an earlier note that wrongly claimed a separate "issue 0059" blocked the tuple match-body form — no such issue exists; the capture-parse bug was the whole problem.) Gates: zig build, zig build test, 273/273 examples. --- examples/235-multi-value-failable.sx | 14 +++++++++++++- tests/expected/235-multi-value-failable.exit | 2 +- tests/expected/235-multi-value-failable.txt | 2 +- 3 files changed, 15 insertions(+), 3 deletions(-) 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