lib: graduate utf8.runesz and bufio.readbyte to (i32 | void)
Both used the -1 sentinel return; both had no external callers, so the graduation is purely the API-shape change. utf8.runesz uses void for "rune outside legal range"; bufio.readbyte uses void for EOF (empty buffer). The full Hare shapes ((size | invalid) and (u8 | EOF | io::error)) are still richer than this — those richer returns arrive when utf8 grows an explicit invalid type and bufio wires through io::stream's error path.
This commit is contained in:
@@ -25,16 +25,17 @@ export fn init(b: *buf, s: streamp, data: *u8, cap: i32) void = {
|
||||
b.w = 0;
|
||||
};
|
||||
|
||||
// readbyte — pop one byte. -1 if empty. Hare name (transliterated
|
||||
// from `read_byte`); the `-1`-for-EOF return is the sanctioned subset
|
||||
// of Hare's `(u8 | EOF | error)`.
|
||||
export fn readbyte(b: *buf) i32 = {
|
||||
// readbyte — pop one byte. void variant signals EOF (empty buffer).
|
||||
// Hare name; the (i32 | void) shape is a subset of Hare's full
|
||||
// (u8 | EOF | io::error) — error reporting from the underlying
|
||||
// stream will arrive when bufio actually wires up to io::stream.
|
||||
export fn readbyte(b: *buf) (i32 | void) = {
|
||||
if (b.r < b.w) {
|
||||
let c: u8 = b.data[b.r];
|
||||
b.r += 1;
|
||||
return c: i32;
|
||||
};
|
||||
return -1;
|
||||
return;
|
||||
};
|
||||
|
||||
// Distinct alias so `(str | linerr)` has two variant types the
|
||||
|
||||
Reference in New Issue
Block a user