`raise EXPR` now terminates a failable function via the error channel. Scope (Option 2): full raise sema checks + lowering for the pure-failable shape (`-> !` / `-> !Named`); the value-carrying `-> (T..., !)` shape bails loudly, deferred to E2's error-channel tuple ABI. - lowerStmt + tryLowerAsExpr: `.raise_stmt` -> lowerRaise (also routes a raise that is a block's last statement, which previously hit unknown_expr) - lowerRaise: failable-context check (effectiveReturnType + errorChannelOf); literal membership via lowerErrorTagLiteral; variable form subset-checked via checkErrorSetSubset; pure-failable emits ret(tag) - lowerErrorTagLiteral skips membership for the bare-`!` inferred placeholder - plain `return;` in a pure-failable fn emits ret(0) (success / no error) - parser: in_defer_body flag rejects `raise` inside a `defer` body Tests: examples/219-raise.sx (positive, exit 8), examples/220-raise-rejections.sx (3 sema rejections, exit 1), inline parser test for raise-in-defer. Gates: zig build, zig build test, 258/258 examples.
2 lines
2 B
Plaintext
2 lines
2 B
Plaintext
8
|