hare

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

commit 4a5eb434cbb25a8a23b056f5aad93e4c05677795
parent 6ce05c9a2449670dddc0fab602ee73bb2d88195a
Author: Drew DeVault <sir@cmpwn.com>
Date:   Sat, 13 Jul 2024 15:16:38 +0200

debug::dwarf: eliminate use of bufio::read_* functions

This is the last internal consumer of these functions.

Signed-off-by: Drew DeVault <sir@cmpwn.com>

Diffstat:
Mdebug/dwarf/reader.ha | 40++++++++++++++++++++++------------------
1 file changed, 22 insertions(+), 18 deletions(-)

diff --git a/debug/dwarf/reader.ha b/debug/dwarf/reader.ha @@ -109,21 +109,15 @@ fn read_tell(rd: *table_reader) size = { fn read_sbyte(rd: *table_reader) (i8 | io::error) = { read_advance(rd, size(i8))?; - - match (bufio::read_byte(rd.src)?) { - case let byte: u8 => - return byte: i8; - case io::EOF => - return 0: io::underread; - }; + return read_ubyte(rd)?: i8; }; fn read_ubyte(rd: *table_reader) (u8 | io::error) = { read_advance(rd, size(u8))?; - - match (bufio::read_byte(rd.src)?) { - case let byte: u8 => - return byte; + let b: [1]u8 = [0...]; + match (io::read(rd.src, b)?) { + case size => + return b[0]; case io::EOF => return 0: io::underread; }; @@ -213,12 +207,22 @@ fn read_slice(rd: *table_reader, amt: size) ([]u8 | io::error) = { // Borrowed from underlying source fn read_string(rd: *table_reader) (const str | io::error) = { - // XXX: Leaks, should probably borrow from memio - match (bufio::read_tok(rd.src, 0)?) { - case let data: []u8 => - rd.length -= len(data) + 1; - return strings::fromutf8(data)!; - case io::EOF => - return 0: io::underread; + const start = io::tell(rd.src)!; + for (true) { + match (memio::borrowedread(rd.src, 1)) { + case let d: []u8 => + if (d[0] == 0) { + break; + }; + case io::EOF => + return 0: io::underread; + }; }; + const end = io::tell(rd.src)!; + const length = end - start; + io::seek(rd.src, start, io::whence::SET)!; + + let data = read_slice(rd, length: size)?; + data = data[..len(data)-1]; // Trim \0 + return strings::fromutf8(data)!; };