os: graduate tryopen/trywrite/tryread to (T | oserror)
Final piece of the os module graduation: the three try* wrappers move off the (T | str) placeholder shape. `oserror` becomes a real Hare-style error type (`!i64` instead of plain `i64`), so it's picked up by ?-propagation as the error half without callers having to name it. tryread: (i64 | oserror) was (i64 | str) trywrite: (i64 | oserror) was (i64 | str) tryopen: (i32 | oserror) was (i32 | str) Callsites updated: wwdump uses tryopen; the e2e trywrite probe matches on os.oserror and validates -EBADF for a bad fd (-9 instead of the old "write failed" string length). selfhost/test/smoke.ww switched to raw os.open(2) instead of os.tryopen for probe 7 — same reason as the os.readall switch in the prior commit: probe 6 in 990_selfhost compiles smoke.ww standalone, and cross-module type refs like `os.oserror` don't resolve in that mode.
This commit is contained in:
@@ -74,11 +74,11 @@ export fn main(argc: i32, argv: **u8) i32 = {
|
||||
return 2;
|
||||
};
|
||||
|
||||
let fdorerr: (i32 | str) = os.tryopen(path, os.O_RDONLY, 0i32);
|
||||
let fdorerr: (i32 | os.oserror) = os.tryopen(path, os.O_RDONLY, 0i32);
|
||||
let fd: i32 = -1;
|
||||
match (fdorerr) {
|
||||
case let v: i32 => fd = v;
|
||||
case let e: str => {
|
||||
case let e: os.oserror => {
|
||||
os.write(2, "wwdump: cannot open ".ptr, 20u64);
|
||||
os.write(2, path, argstrlen(path): u64);
|
||||
os.write(2, "\n".ptr, 1u64);
|
||||
|
||||
Reference in New Issue
Block a user