hare

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

commit 261cf7daff3f56b03c0829f19fad4039032fbd42
parent c2f192c4eadc57b6150dea1b77d5f560e3aaf568
Author: Drew DeVault <sir@cmpwn.com>
Date:   Fri,  6 Dec 2024 10:06:20 +0100

debug::dwarf: re-introduce bufio::read_* functions

Willow reported that this caused a regression in printing backtraces, so
it's back to the drawing board for this one.

This reverts commit 4a5eb434cbb25a8a23b056f5aad93e4c05677795.

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

diff --git a/debug/dwarf/reader.ha b/debug/dwarf/reader.ha @@ -109,15 +109,21 @@ fn read_tell(rd: *table_reader) size = { fn read_sbyte(rd: *table_reader) (i8 | io::error) = { read_advance(rd, size(i8))?; - return read_ubyte(rd)?: i8; + + match (bufio::read_byte(rd.src)?) { + case let byte: u8 => + return byte: i8; + case io::EOF => + return 0: io::underread; + }; }; fn read_ubyte(rd: *table_reader) (u8 | io::error) = { read_advance(rd, size(u8))?; - let b: [1]u8 = [0...]; - match (io::read(rd.src, b)?) { - case size => - return b[0]; + + match (bufio::read_byte(rd.src)?) { + case let byte: u8 => + return byte; case io::EOF => return 0: io::underread; }; @@ -207,22 +213,12 @@ 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) = { - 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; - }; + // 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 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)!; };