From e07c62f447e9f041901812a6e9cda05ae76d92df Mon Sep 17 00:00:00 2001 From: Rose Hogenson Date: Sat, 27 Aug 2022 20:22:21 -0700 Subject: Fix more bytes vs words bugs. --- bytecode/src/heap.rs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/bytecode/src/heap.rs b/bytecode/src/heap.rs index 78a406f..c70d897 100644 --- a/bytecode/src/heap.rs +++ b/bytecode/src/heap.rs @@ -1,6 +1,5 @@ use crate::data::{Pointer, Value}; use std::collections::{HashMap, VecDeque}; -use std::iter::Iterator; fn rewrite_pointers( stack: &mut [Value], @@ -111,7 +110,7 @@ impl Heap { continue; } let sz = self.alloc_size(p)?; - for j in (0..sz).step_by(8) { + for j in 0..sz / 8 { let val = self.peek(p, j)?; let vp = if val.is_pointer() { val.to_pointer().unwrap() @@ -186,13 +185,14 @@ impl Heap { } pub fn poke(&mut self, v: Value, p: Pointer, offset: usize) -> Result<(), String> { + let offset_bytes = offset * 8; let obj_sz = self.alloc_size(p)?; - if offset >= obj_sz { + if offset_bytes >= obj_sz { return Err(format!( - "invalid offset {offset} in an object of size {obj_sz}" + "invalid offset {offset_bytes} in an object of size {obj_sz}" )); } - let (u, _) = open_ptr(p.offset(offset)); + let (u, _) = open_ptr(p.offset(offset_bytes)); let Value(x) = v; if u >= self.heap.len() { return Err(format!("invalid pointer {:x}", p)); -- cgit v1.3.1