commit 1eb1ee69c681f18377765d0fa8a4a12cd9a84d64
parent 8a317b8c478d673943c784af32a873ab7437f754
Author: Sebastian <sebastian@sebsite.pw>
Date: Sat, 8 Jun 2024 01:04:27 -0400
encoding::utf8: return done from next/prev
Breaking-change: 0.24.2
Signed-off-by: Sebastian <sebastian@sebsite.pw>
Diffstat:
3 files changed, 15 insertions(+), 16 deletions(-)
diff --git a/bufio/scanner.ha b/bufio/scanner.ha
@@ -206,7 +206,7 @@ export fn scan_rune(
match (utf8::next(&dec)?) {
case let r: rune =>
return r;
- case void =>
+ case done =>
return io::EOF;
case utf8::more =>
return utf8::invalid;
@@ -336,7 +336,7 @@ export fn read_rune(
match (utf8::next(&dec)?) {
case let r: rune =>
return r;
- case void =>
+ case done =>
return io::EOF;
case utf8::more =>
return utf8::invalid;
diff --git a/encoding/utf8/decode.ha b/encoding/utf8/decode.ha
@@ -17,11 +17,11 @@ const masks: [2][8]u8 = [
[0x7f, 0x1f, 0x0f, 0x0f, 0x0f, 0x07, 0x07, 0x07],
];
-// Returns the next rune from a decoder. void is returned when there are no
+// Returns the next rune from a decoder. done is returned when there are no
// remaining codepoints.
-export fn next(d: *decoder) (rune | void | more | invalid) = {
+export fn next(d: *decoder) (rune | done | more | invalid) = {
if (d.offs == len(d.src)) {
- return;
+ return done;
};
// from https://github.com/skeeto/scratch/blob/master/parsers/utf8_decode.c
@@ -42,11 +42,11 @@ export fn next(d: *decoder) (rune | void | more | invalid) = {
return more;
};
-// Returns the previous rune from a decoder. void is returned when there are no
+// Returns the previous rune from a decoder. done is returned when there are no
// previous codepoints.
-export fn prev(d: *decoder) (rune | void | more | invalid) = {
+export fn prev(d: *decoder) (rune | done | more | invalid) = {
if (d.offs == 0) {
- return;
+ return done;
};
let n = d.offs;
d.offs -= 1;
@@ -75,23 +75,23 @@ export fn prev(d: *decoder) (rune | void | more | invalid) = {
let decoder = decode(input);
for (let i = 0z; i < len(expected); i += 1) {
match (next(&decoder)) {
- case (invalid | more | void) =>
+ case (invalid | more | done) =>
abort();
case let r: rune =>
assert(r == expected[i]);
};
};
- assert(next(&decoder) is void);
+ assert(next(&decoder) is done);
assert(decoder.offs == len(decoder.src));
for (let i = 0z; i < len(expected); i += 1) {
match (prev(&decoder)) {
- case (invalid | more | void) =>
+ case (invalid | more | done) =>
abort();
case let r: rune =>
assert(r == expected[len(expected) - i - 1]);
};
};
- assert(prev(&decoder) is void);
+ assert(prev(&decoder) is done);
const inv: [_]u8 = [0xA0, 0xA1];
decoder = decode(inv);
diff --git a/strings/iter.ha b/strings/iter.ha
@@ -52,12 +52,11 @@ export fn prev(iter: *iterator) (rune | done) = move(iter.reverse, iter);
fn move(forward: bool, iter: *iterator) (rune | done) = {
let fun = if (forward) &utf8::next else &utf8::prev;
- return match (fun(&iter.dec)) {
- case void => yield done;
+ match (fun(&iter.dec)) {
case (utf8::more | utf8::invalid) =>
abort("Invalid UTF-8 string (this should not happen)");
- case let r: rune =>
- yield r;
+ case let r: (rune | done) =>
+ return r;
};
};