test: remove package-wide import assumptions
This commit is contained in:
@@ -1,5 +1,4 @@
|
||||
// #30 dir-package — the imported module `aa`. Paired with ../main.ww,
|
||||
// whose primary package also declares a value-namespace `fn aa`. Driver:
|
||||
// the modfn_coexist leg of the decl-namespace gate (NNN_declns_sep.c).
|
||||
// #30 dir-package — the imported package whose declared name supplies the
|
||||
// `aa` binding in ../main.ww. Driver: the declns leg of sepimport_test.
|
||||
package aa;
|
||||
export fn helper() i32 = { return 5; };
|
||||
|
||||
@@ -1,11 +1,8 @@
|
||||
// #30 dir-package coexistence — the value-namespace `fn aa` and the
|
||||
// imported MODULE `aa` (SK_USE) coexist. `aa()` binds the local fn (a
|
||||
// module is not callable); `aa.helper()` binds through the module (the
|
||||
// fn has no field `helper`). Both must resolve, so any mis-resolution
|
||||
// fails to COMPILE; running to 1+5=6 proves both bind. The dir-package
|
||||
// reshape of the dying single-file modfn_coexist_ok.ww (M4 amalgamation
|
||||
// shape retired at the flip).
|
||||
// The imported default qualifier `aa` and package-level declarations occupy
|
||||
// overlapping Go-style scopes, so the local function deliberately has a
|
||||
// distinct name. Running to 1+5=6 proves both the local declaration and the
|
||||
// file-scoped import binding resolve independently.
|
||||
package main;
|
||||
import aa;
|
||||
fn aa() i32 = { return 1; };
|
||||
export fn main() i32 = { return aa() + aa.helper(); };
|
||||
fn localaa() i32 = { return 1; };
|
||||
export fn main() i32 = { return localaa() + aa.helper(); };
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
// #30 dir-package — the imported module `aa` for the VALUE-BEFORE-USE
|
||||
// twin. Identical to ../../modfn_coexist/aa/aa.ww; kept as its own dir so
|
||||
// the two layouts are independently buildable. Driver: the
|
||||
// modfn_coexist_vbu leg of the decl-namespace gate (NNN_declns_sep.c).
|
||||
// #30 dir-package — the imported package for the declaration-before-import
|
||||
// twin. It stays in its own directory so the two layouts are independently
|
||||
// buildable.
|
||||
package aa;
|
||||
export fn helper() i32 = { return 5; };
|
||||
|
||||
@@ -1,12 +1,7 @@
|
||||
// #30 VALUE-BEFORE-USE — the twin of ../modfn_coexist/main.ww with the
|
||||
// decl order flipped: `fn aa` is declared BEFORE `import aa`. cstage is
|
||||
// order-independent (installs every SK_USE in a first pass); wwstage
|
||||
// installs in source order, so this direction exercises a DISTINCT path
|
||||
// (installdecl's N_USE arm must set use_alias on the pre-installed value
|
||||
// sym). The gate asserts this builds + runs to 6 AND emits asm
|
||||
// byte-identical to the use-before-value order — silent order-dependence
|
||||
// is exactly what regresses.
|
||||
// Declaration-before-import twin of ../modfn_coexist/main.ww. The distinct
|
||||
// local name follows Go's import/package-scope collision rule while retaining
|
||||
// the order-independence check for installing a real import binding.
|
||||
package main;
|
||||
fn aa() i32 = { return 1; };
|
||||
fn localaa() i32 = { return 1; };
|
||||
import aa;
|
||||
export fn main() i32 = { return aa() + aa.helper(); };
|
||||
export fn main() i32 = { return localaa() + aa.helper(); };
|
||||
|
||||
@@ -1,13 +1,8 @@
|
||||
//ww:run-exit 42
|
||||
package main;
|
||||
// migrated from test/wcc/699_use_promote_alias.c: SK_USE->SK_DEF promotion must keep use_alias so `defmod.flag` resolves.
|
||||
package defmod;
|
||||
export def defmod: i32 = 0i32;
|
||||
export type flag = enum i32 {
|
||||
NONE = 0,
|
||||
A = 42,
|
||||
};
|
||||
package main;
|
||||
// migrated from test/wcc/699_use_promote_alias.c: importing a package whose
|
||||
// export has the same name as its default qualifier must retain the qualifier
|
||||
// binding so `defmod.flag` resolves.
|
||||
import defmod;
|
||||
fn main() i32 = {
|
||||
let m: defmod.flag = defmod.flag.A;
|
||||
|
||||
7
test/wcc/data/r699_usepromote_def/defmod/defmod.ww
Normal file
7
test/wcc/data/r699_usepromote_def/defmod/defmod.ww
Normal file
@@ -0,0 +1,7 @@
|
||||
package defmod;
|
||||
|
||||
export def defmod: i32 = 0i32;
|
||||
export type flag = enum i32 {
|
||||
NONE = 0,
|
||||
A = 42,
|
||||
};
|
||||
@@ -1,15 +1,8 @@
|
||||
//ww:run-exit 42
|
||||
package main;
|
||||
// migrated from test/wcc/699_use_promote_alias.c: SK_USE->SK_FN promotion (the original bug) must keep use_alias or `fnmod.flag` fails "unknown type".
|
||||
package fnmod;
|
||||
export type flag = enum i32 {
|
||||
NONE = 0,
|
||||
A = 42,
|
||||
};
|
||||
export fn fnmod() i32 = {
|
||||
return 0i32;
|
||||
};
|
||||
package main;
|
||||
// migrated from test/wcc/699_use_promote_alias.c: importing a package whose
|
||||
// export has the same name as its default qualifier must retain the qualifier
|
||||
// binding so `fnmod.flag` resolves.
|
||||
import fnmod;
|
||||
fn main() i32 = {
|
||||
let m: fnmod.flag = fnmod.flag.A;
|
||||
|
||||
9
test/wcc/data/r699_usepromote_fn/fnmod/fnmod.ww
Normal file
9
test/wcc/data/r699_usepromote_fn/fnmod/fnmod.ww
Normal file
@@ -0,0 +1,9 @@
|
||||
package fnmod;
|
||||
|
||||
export type flag = enum i32 {
|
||||
NONE = 0,
|
||||
A = 42,
|
||||
};
|
||||
export fn fnmod() i32 = {
|
||||
return 0i32;
|
||||
};
|
||||
@@ -1,15 +1,8 @@
|
||||
//ww:run-exit 42
|
||||
package main;
|
||||
// migrated from test/wcc/699_use_promote_alias.c: SK_USE->SK_TYPE in-place promotion keeps use_alias so `typmod.flag` resolves (check.c self-import branch).
|
||||
package typmod;
|
||||
export type typmod = struct {
|
||||
x: i32,
|
||||
};
|
||||
export type flag = enum i32 {
|
||||
NONE = 0,
|
||||
A = 42,
|
||||
};
|
||||
package main;
|
||||
// migrated from test/wcc/699_use_promote_alias.c: importing a package whose
|
||||
// export has the same name as its default qualifier must retain the qualifier
|
||||
// binding so `typmod.flag` resolves.
|
||||
import typmod;
|
||||
fn main() i32 = {
|
||||
let m: typmod.flag = typmod.flag.A;
|
||||
|
||||
9
test/wcc/data/r699_usepromote_type/typmod/typmod.ww
Normal file
9
test/wcc/data/r699_usepromote_type/typmod/typmod.ww
Normal file
@@ -0,0 +1,9 @@
|
||||
package typmod;
|
||||
|
||||
export type typmod = struct {
|
||||
x: i32,
|
||||
};
|
||||
export type flag = enum i32 {
|
||||
NONE = 0,
|
||||
A = 42,
|
||||
};
|
||||
@@ -1,13 +1,8 @@
|
||||
//ww:run-exit 42
|
||||
package main;
|
||||
// migrated from test/wcc/699_use_promote_alias.c: SK_USE->SK_VAR promotion must keep use_alias so `varmod.flag` resolves.
|
||||
package varmod;
|
||||
export let varmod: i32 = 0i32;
|
||||
export type flag = enum i32 {
|
||||
NONE = 0,
|
||||
A = 42,
|
||||
};
|
||||
package main;
|
||||
// migrated from test/wcc/699_use_promote_alias.c: importing a package whose
|
||||
// export has the same name as its default qualifier must retain the qualifier
|
||||
// binding so `varmod.flag` resolves.
|
||||
import varmod;
|
||||
fn main() i32 = {
|
||||
let m: varmod.flag = varmod.flag.A;
|
||||
|
||||
7
test/wcc/data/r699_usepromote_var/varmod/varmod.ww
Normal file
7
test/wcc/data/r699_usepromote_var/varmod/varmod.ww
Normal file
@@ -0,0 +1,7 @@
|
||||
package varmod;
|
||||
|
||||
export let varmod: i32 = 0i32;
|
||||
export type flag = enum i32 {
|
||||
NONE = 0,
|
||||
A = 42,
|
||||
};
|
||||
@@ -1,8 +1,6 @@
|
||||
//ww:run-exit 42
|
||||
// Migrated from 700_e2e row 45.
|
||||
package main;
|
||||
import os;
|
||||
import rt;
|
||||
type point = struct { x: i64, y: i64 };
|
||||
fn main() i32 = {
|
||||
let p: *point = alloc(point { x = 7, y = 35 })!;
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
//ww:run-exit 16
|
||||
// Migrated from 700_e2e row 36.
|
||||
package main;
|
||||
import rt;
|
||||
fn main() i32 = {
|
||||
let s: []u8 = alloc([], 16)!;
|
||||
append(s, 72u8, 105u8);
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
//ww:run-exit 12
|
||||
// Migrated from 700_e2e row 39.
|
||||
package main;
|
||||
import rt;
|
||||
fn doit() (i32 | nomem) = {
|
||||
let s: []str = alloc([], 12)?;
|
||||
return s.cap: i32;
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
//ww:run-exit 8
|
||||
// Migrated from 700_e2e row 37.
|
||||
package main;
|
||||
import rt;
|
||||
fn main() i32 = {
|
||||
let s: []rune = alloc([], 8)!;
|
||||
return s.cap;
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
//ww:run-exit 4
|
||||
// Migrated from 700_e2e row 38.
|
||||
package main;
|
||||
import rt;
|
||||
fn main() i32 = {
|
||||
let s: []str = alloc([], 4)!;
|
||||
return s.cap;
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
//ww:run-exit 25
|
||||
// Migrated from 700_e2e row 34.
|
||||
package main;
|
||||
import rt;
|
||||
type point = struct { x: i32, y: i32 };
|
||||
fn main() i32 = {
|
||||
let p: *point = alloc(point { x = 3, y = 4 })!;
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
//ww:run-exit 100
|
||||
// Migrated from 700_e2e row 35.
|
||||
package main;
|
||||
import os;
|
||||
fn main() i32 = {
|
||||
let s: []u8;
|
||||
s.ptr = nil; s.len = 0; s.cap = 0;
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
//ww:run-exit 5
|
||||
package main;
|
||||
import rt;
|
||||
fn main() i32 = {
|
||||
let w: []i32 = alloc([], 4u64)!;
|
||||
w[2] = 5i32;
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
//ww:run-exit 16
|
||||
package main;
|
||||
import rt;
|
||||
fn main() i32 = {
|
||||
let b: []u8 = alloc([], 8u64)!;
|
||||
b[0] = 7u8;
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
//ww:run-exit 11
|
||||
package main;
|
||||
import os;
|
||||
fn want(args: (str | rune)...) i64 = {
|
||||
let total: i64 = 0;
|
||||
let i: i32 = 0;
|
||||
|
||||
@@ -4,6 +4,7 @@ package main;
|
||||
import alpha;
|
||||
import beta;
|
||||
export fn main() i32 = {
|
||||
let _ = alpha.foo(0, 1);
|
||||
let n: (u8 | []u8) = 7u8;
|
||||
let r: i32 = beta.foo(10, n);
|
||||
if (r != 17) { return 11; };
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
//ww:run-exit 13
|
||||
package main;
|
||||
import rt;
|
||||
type holder = struct { f: f64, s: str, n: i32 };
|
||||
fn main() i32 = { let p: *holder = alloc(holder { f = 1.5f64, s = "abc", n = 10 })!; return p.s.len + p.n; };
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
//ww:run-exit 102
|
||||
package main;
|
||||
import rt;
|
||||
type holder = struct { n: i32, s: str };
|
||||
fn main() i32 = { let p: *holder = alloc(holder { n = 100, s = "hi" })!; return p.n + p.s.len; };
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
//ww:run-exit 209
|
||||
package main;
|
||||
import rt;
|
||||
type holder = struct { s: str };
|
||||
fn main() i32 = { let p: *holder = alloc(holder { s = "hi" })!; let sum: i32 = 0; let i: i32 = 0; for (i < p.s.len) { sum += p.s[i]: i32; i += 1; }; return sum; };
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
//ww:run-exit 5
|
||||
package main;
|
||||
import rt;
|
||||
type holder = struct { s: str };
|
||||
fn main() i32 = { let p: *holder = alloc(holder { s = "hello" })!; return p.s.len; };
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
//ww:run-exit 12
|
||||
package main;
|
||||
import rt;
|
||||
type holder = struct { s: str, n: i32 };
|
||||
fn main() i32 = { let p: *holder = alloc(holder { s = "world", n = 7 })!; return p.s.len + p.n; };
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
//ww:run-exit 9
|
||||
package main;
|
||||
import rt;
|
||||
type holder = struct { a: str, b: str };
|
||||
fn main() i32 = { let p: *holder = alloc(holder { a = "foo", b = "barbaz" })!; return p.a.len + p.b.len; };
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
package main;
|
||||
import memio;
|
||||
import io;
|
||||
import os;
|
||||
export fn main() i32 = {
|
||||
let buf: [16]u8;
|
||||
let st: memio.stream = memio.fixed(buf[0:16]);
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
package main;
|
||||
import memio;
|
||||
import io;
|
||||
import os;
|
||||
export fn main() i32 = {
|
||||
let seed: [4]u8;
|
||||
seed[0] = 1u8; seed[1] = 2u8; seed[2] = 3u8; seed[3] = 4u8;
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
package main;
|
||||
import memio;
|
||||
import io;
|
||||
import os;
|
||||
export fn main() i32 = {
|
||||
let a: [3]u8;
|
||||
a[0] = 10u8; a[1] = 11u8; a[2] = 12u8;
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
package main;
|
||||
import memio;
|
||||
import io;
|
||||
import os;
|
||||
export fn main() i32 = {
|
||||
let st: memio.stream = memio.dynamic();
|
||||
let s: io.stream = &st.vt;
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
package main;
|
||||
import memio;
|
||||
import io;
|
||||
import os;
|
||||
export fn main() i32 = {
|
||||
let seed: [4]u8;
|
||||
seed[0] = 1u8; seed[1] = 2u8; seed[2] = 3u8; seed[3] = 4u8;
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
package main;
|
||||
import memio;
|
||||
import io;
|
||||
import os;
|
||||
export fn main() i32 = {
|
||||
let buf: [8]u8;
|
||||
buf[0] = 65u8; buf[1] = 66u8; buf[2] = 67u8; buf[3] = 68u8;
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
//ww:run-exit 46
|
||||
// Migrated from 777_fmt_handle_run row fprintf_stream.
|
||||
package main;
|
||||
import os;
|
||||
import fmt;
|
||||
import io;
|
||||
import memio;
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
//ww:run-exit 51
|
||||
// Migrated from 778_bufio_vstream_run row branched_bufio_wrap.
|
||||
package main;
|
||||
import os;
|
||||
import bufio;
|
||||
import memio;
|
||||
import io;
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
//ww:run-exit 49
|
||||
// Migrated from 778_bufio_vstream_run row isbuffered_v_boundary.
|
||||
package main;
|
||||
import os;
|
||||
import bufio;
|
||||
import memio;
|
||||
import io;
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
//ww:run-exit 48
|
||||
// Migrated from 778_bufio_vstream_run row isbuffered_v_discriminate.
|
||||
package main;
|
||||
import os;
|
||||
import bufio;
|
||||
import memio;
|
||||
import io;
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
//ww:run-exit 53
|
||||
// Migrated from 778_bufio_vstream_run row scanner_byte_bytes.
|
||||
package main;
|
||||
import os;
|
||||
import bufio;
|
||||
import errors;
|
||||
import memio;
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
//ww:run-exit 52
|
||||
// Migrated from 778_bufio_vstream_run row scanner_lines.
|
||||
package main;
|
||||
import os;
|
||||
import bufio;
|
||||
import errors;
|
||||
import memio;
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
//ww:run-exit 47
|
||||
// Migrated from 778_bufio_vstream_run row stream_read_unread.
|
||||
package main;
|
||||
import os;
|
||||
import bufio;
|
||||
import memio;
|
||||
import io;
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
//ww:run-exit 54
|
||||
// Migrated from 778_bufio_vstream_run row stream_setflush.
|
||||
package main;
|
||||
import os;
|
||||
import bufio;
|
||||
import memio;
|
||||
import io;
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
//ww:run-exit 55
|
||||
// Migrated from 778_bufio_vstream_run row stream_unread.
|
||||
package main;
|
||||
import os;
|
||||
import bufio;
|
||||
import memio;
|
||||
import io;
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
//ww:run-exit 46
|
||||
// Migrated from 778_bufio_vstream_run row stream_write_flush.
|
||||
package main;
|
||||
import os;
|
||||
import bufio;
|
||||
import memio;
|
||||
import io;
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
//ww:run-exit 45
|
||||
package main;
|
||||
import os;
|
||||
import log;
|
||||
import memio;
|
||||
import io;
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
//ww:run-exit 44
|
||||
package main;
|
||||
import os;
|
||||
import log;
|
||||
import memio;
|
||||
import io;
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
//ww:run-exit 43
|
||||
package main;
|
||||
import os;
|
||||
import log;
|
||||
export fn main() i32 = {
|
||||
log.printfln("v={}", 7i64);
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
//ww:run-exit 42
|
||||
package main;
|
||||
import os;
|
||||
import log;
|
||||
export fn main() i32 = {
|
||||
log.println("hello");
|
||||
|
||||
@@ -5,6 +5,7 @@ import sa;
|
||||
import sb;
|
||||
fn cb(x: sa.s, v: i32) i32 = { return v + 100; };
|
||||
export fn main() i32 = {
|
||||
let bait: sb.s;
|
||||
let vt = sa.mkvt((&cb): *sa.reader);
|
||||
let st: sa.s = &vt;
|
||||
let r = sa.read(st, 5);
|
||||
|
||||
@@ -4,6 +4,7 @@ package main;
|
||||
import sa;
|
||||
import sb;
|
||||
export fn main() i32 = {
|
||||
let bait: sb.s;
|
||||
let o = sa.mk(21, 8);
|
||||
let r = sa.geta(o);
|
||||
if (r != 21) { return 11; };
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
//ww:run-exit 50
|
||||
package main;
|
||||
import os;
|
||||
import fmt;
|
||||
import io;
|
||||
import memio;
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
//ww:run-exit 51
|
||||
package main;
|
||||
import os;
|
||||
import fmt;
|
||||
import io;
|
||||
import memio;
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
//ww:run-exit 52
|
||||
package main;
|
||||
import os;
|
||||
import fmt;
|
||||
import io;
|
||||
import memio;
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
//ww:run-exit 54
|
||||
package main;
|
||||
import os;
|
||||
import fmt;
|
||||
import io;
|
||||
export fn main() i32 = { let buf: [16]u8; let x: int = 42; let v: str = ""; match (fmt.bsprintf(buf[0:16], "{}", x)) { case let s: str => { v = s; }; case io.error => { return 91; }; }; if (v.len != 2) { return 92; }; if (v[0] != 52u8 || v[1] != 50u8) { return 93; }; return 54; };
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
//ww:run-exit 57
|
||||
package main;
|
||||
import os;
|
||||
import fmt;
|
||||
import io;
|
||||
import memio;
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
//ww:run-exit 53
|
||||
package main;
|
||||
import os;
|
||||
import fmt;
|
||||
import io;
|
||||
import memio;
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
//ww:run-exit 55
|
||||
package main;
|
||||
import os;
|
||||
import fmt;
|
||||
import io;
|
||||
import memio;
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
//ww:run-exit 56
|
||||
package main;
|
||||
import os;
|
||||
import fmt;
|
||||
import io;
|
||||
import memio;
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
//ww:run
|
||||
// Runtime half of 930_free_noop_run.c free_alloc_roundtrip.
|
||||
package main;
|
||||
import rt;
|
||||
export fn main() i32 = {
|
||||
let p: *i64 = alloc(11i64)!;
|
||||
free(p);
|
||||
|
||||
@@ -10,4 +10,4 @@ export fn handler(s: str) str = { return s; };
|
||||
package main;
|
||||
import beta;
|
||||
import gamma;
|
||||
fn main() int = { return beta.usebeta(): int; };
|
||||
fn main() int = { let _ = gamma.handler(""); return beta.usebeta(): int; };
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
//ww:run-exit 42
|
||||
package main;
|
||||
package beta;
|
||||
import gamma;
|
||||
export type berr = !void;
|
||||
export fn op() (i32 | berr) = { return 5; };
|
||||
export fn user() (i32 | berr) = { let v: i32 = op()?; return v + 37; };
|
||||
export fn user() (i32 | berr) = { let _ = gamma.op(); let v: i32 = op()?; return v + 37; };
|
||||
package gamma;
|
||||
export type gerr1 = !void;
|
||||
export type gerr2 = !u8;
|
||||
export fn op() (i32 | gerr1 | gerr2) = { return 0; };
|
||||
package main;
|
||||
import beta;
|
||||
import gamma;
|
||||
fn main() int = { match (beta.user()) { case let n: i32 => return n: int; case berr => return 99; }; };
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
//ww:run-exit 42
|
||||
package main;
|
||||
package beta;
|
||||
import gamma;
|
||||
export type berr = !void;
|
||||
export fn op() (i32 | berr) = { return 5; };
|
||||
export fn user() (i32 | berr) = { let v: i32 = op()?; return v + 37; };
|
||||
export fn user() (i32 | berr) = { let _ = gamma.other(); let v: i32 = op()?; return v + 37; };
|
||||
package gamma;
|
||||
export type gerr1 = !void;
|
||||
export fn other() (i32 | gerr1) = { return 0; };
|
||||
package main;
|
||||
import beta;
|
||||
import gamma;
|
||||
fn main() int = { match (beta.user()) { case let n: i32 => return n: int; case berr => return 99; }; };
|
||||
|
||||
Reference in New Issue
Block a user