diff options
| author | Rose Hogenson <rhogenson@posteo.net> | 2022-08-27 20:22:21 -0700 |
|---|---|---|
| committer | Rose Hogenson <rhogenson@posteo.net> | 2022-08-27 20:22:21 -0700 |
| commit | e07c62f447e9f041901812a6e9cda05ae76d92df (patch) | |
| tree | 0bab8a19f0842d1bf91acfd47ee37074599cfc90 /bytecode | |
| parent | b9dec5a520f1b2f5d782993efe75b7227744631c (diff) | |
| download | chromatopelma-e07c62f447e9f041901812a6e9cda05ae76d92df.tar.zst | |
Fix more bytes vs words bugs.
Diffstat (limited to 'bytecode')
| -rw-r--r-- | bytecode/src/heap.rs | 10 |
1 files 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)); |
