mirror of
https://github.com/roc-lang/roc.git
synced 2025-09-28 14:24:45 +00:00
fix bug with string offset
This commit is contained in:
parent
1017bbc5ec
commit
eb9ebc8c33
1 changed files with 8 additions and 3 deletions
|
@ -109,7 +109,9 @@ impl ReplAppMemory for ExpectMemory {
|
||||||
deref_number!(deref_f64, f64);
|
deref_number!(deref_f64, f64);
|
||||||
|
|
||||||
fn deref_str(&self, addr: usize) -> &str {
|
fn deref_str(&self, addr: usize) -> &str {
|
||||||
let last_byte_addr = addr + (3 * std::mem::size_of::<usize>()) - 1;
|
const WIDTH: usize = 3 * std::mem::size_of::<usize>();
|
||||||
|
|
||||||
|
let last_byte_addr = addr + WIDTH - 1;
|
||||||
let last_byte = self.deref_i8(last_byte_addr);
|
let last_byte = self.deref_i8(last_byte_addr);
|
||||||
|
|
||||||
let is_small = last_byte < 0;
|
let is_small = last_byte < 0;
|
||||||
|
@ -118,13 +120,16 @@ impl ReplAppMemory for ExpectMemory {
|
||||||
let ptr = unsafe { self.start.add(addr) };
|
let ptr = unsafe { self.start.add(addr) };
|
||||||
let roc_str: &RocStr = unsafe { &*ptr.cast() };
|
let roc_str: &RocStr = unsafe { &*ptr.cast() };
|
||||||
|
|
||||||
|
*self.bytes_read.borrow_mut() += WIDTH - 1;
|
||||||
|
|
||||||
roc_str.as_str()
|
roc_str.as_str()
|
||||||
} else {
|
} else {
|
||||||
let offset = self.deref_usize(addr);
|
let offset = self.deref_usize(addr);
|
||||||
let length = self.deref_usize(addr + std::mem::size_of::<usize>());
|
let length = self.deref_usize(addr + std::mem::size_of::<usize>());
|
||||||
|
let _capacity = self.deref_usize(addr + 2 * std::mem::size_of::<usize>());
|
||||||
|
|
||||||
// we don't store extra capacity
|
// subtract the last byte, which we've now read twice
|
||||||
// let capacity = self.deref_usize(addr + 2 * std::mem::size_of::<usize>());
|
*self.bytes_read.borrow_mut() -= 1;
|
||||||
|
|
||||||
unsafe {
|
unsafe {
|
||||||
let ptr = self.start.add(offset);
|
let ptr = self.start.add(offset);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue