// errors — error type (a string) and a few sentinels. Plan 9 model: // the empty string means OK, a non-empty string is the message. type error = str; def eof: error = "eof"; def underread: error = "short read"; def underwrite: error = "short write"; def closed: error = "closed"; def invalid: error = "invalid argument"; def noaccess: error = "permission denied"; def noentry: error = "not found"; def exists: error = "already exists"; export fn isnil(e: error) bool = { return e.len == 0; }; // equal — compare an error against a sentinel (or any other error). // Pure byte equality. (Was `errors.is` before `is` became a keyword // for tagged-union type-tests; rename matches bytes.equal / strings.equal.) export fn equal(e: error, want: error) bool = { if (e.len != want.len) { return false; }; let i: i32 = 0; for (i < e.len) { if (e[i] != want[i]) { return false; }; i += 1; }; return true; };