Files
ww/test/wcc/data/r839_xmod_nominal_match/case.ww
Hojun-Cho 5a8b662d6e test: port 839_xmod_nominal_typeeqast to corpus fixtures
839_xmod_nominal_typeeqast.c -> r839_xmod_nominal_match (run-exit 42),
  r839_xmod_a6_concrete (run), r839_xmod_incompat_concrete (error
  'not assignable'), r839_xmod_distinct_alias (error 'ambiguous
  without nominal layout').

r839_xmod_nominal_match enters DATABYTEID_DIVERGED: the carrier waived
byte-id for the pre-existing cross-module tagged-return spill
divergence; the DIVERGED row makes it loud-on-fix instead. The
typeeqast-layer discriminator itself stays with the lib byteid gate
(test/byteid/libbyteid_test.ww), as the carrier documented.
2026-08-08 14:33:23 +09:00

23 lines
642 B
Plaintext

//ww:run-exit 42
// migrated from test/wcc/839_xmod_nominal_typeeqast.c: bare-spelled union variants matched via QUALIFIED case patterns (`case let x: e.myerr`) — cross-module nominal cover.
package e;
export type myerr = !i64;
export type res = (i64 | myerr);
export fn ok(v: i64) res = { return v; };
export fn bad() res = { return (-7: myerr); };
package main;
import e;
fn unwrap(r: e.res) i64 = {
match (r) {
case let n: i64 => return n;
case let x: e.myerr => return -1;
};
};
export fn main() i32 = {
let a = unwrap(e.ok(40));
let b = unwrap(e.bad());
if (a != 40) { return 11; };
if (b != -1) { return 12; };
return 42;
};