hare

[hare] The Hare programming language
git clone https://git.torresjrjr.com/hare.git
Log | Files | Refs | README | LICENSE

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:
Mbufio/scanner.ha | 4++--
Mencoding/utf8/decode.ha | 20++++++++++----------
Mstrings/iter.ha | 7+++----
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; }; };