// 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 eEOF: error = "eof"; def eShortRead: error = "short read"; def eShortWrite: error = "short write"; def eClosed: error = "closed"; def eInvalid: error = "invalid argument"; def ePerm: error = "permission denied"; def eNotFound: error = "not found"; def eExists: 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; };