24 lines
578 B
Plaintext
24 lines
578 B
Plaintext
//ww:run-exit 107
|
|
// Migrated from 700_e2e row 68.
|
|
package main;
|
|
type invalid = !i32;
|
|
type overflow = !void;
|
|
fn inner(n: i32) (invalid | i64 | overflow) = {
|
|
if (n == 0) { return 7: invalid; };
|
|
if (n < 0) { return void: overflow; };
|
|
return n: i64 + 1000;
|
|
};
|
|
fn outer(n: i32) (overflow | i64 | invalid) = {
|
|
let v: i64 = inner(n)?;
|
|
return v + 1;
|
|
};
|
|
fn main() i32 = {
|
|
let r: (overflow | i64 | invalid) = outer(0);
|
|
match (r) {
|
|
case let v: i64 => return v: i32;
|
|
case let e: invalid => return e + 100;
|
|
case let e: overflow => return 999;
|
|
};
|
|
return 0;
|
|
};
|