}
pub(crate) fn clear(&mut self) {
- unsafe {
- let layout =
- alloc::Layout::from_size_align(self.inner.byte_cap, size_of::<HeapCellValue>())
- .unwrap();
- alloc::dealloc(self.inner.ptr, layout);
- }
-
- self.inner.ptr = ptr::null_mut();
- self.inner.byte_len = 0;
- self.inner.byte_cap = 0;
+ *self = Heap::new();
}
pub(crate) fn store_resource_error(&mut self) {
fn pstr_iter_tests() {
let mut wam = MockWAM::new();
+ let init_len = wam.machine_st.heap.cell_len();
+
let pstr_cell = wam.machine_st.heap.allocate_pstr("abc ").unwrap();
wam.machine_st
.heap
assert_eq!(
iter.next(),
Some(PStrIteratee::PStrSlice {
- slice_loc: heap_index!(1),
+ slice_loc: heap_index!(init_len),
slice_len: "abc ".len()
}),
);
assert!(!iter.is_cyclic());
}
- assert_eq!(wam.machine_st.heap[2], empty_list_as_cell!());
+ assert_eq!(wam.machine_st.heap[init_len + 1], empty_list_as_cell!());
- wam.machine_st.heap[2] = pstr_loc_as_cell!(heap_index!(3));
+ wam.machine_st.heap[init_len + 1] = pstr_loc_as_cell!(heap_index!(init_len + 2));
wam.machine_st.heap.allocate_pstr("def").unwrap();
let h = wam.machine_st.heap.cell_len();
assert_eq!(
iter.next(),
Some(PStrIteratee::PStrSlice {
- slice_loc: heap_index!(1),
+ slice_loc: heap_index!(init_len),
slice_len: "abc ".len()
})
);
assert_eq!(
iter.next(),
Some(PStrIteratee::PStrSlice {
- slice_loc: heap_index!(3),
+ slice_loc: heap_index!(init_len + 2),
slice_len: "def".len(),
})
);
assert_eq!(
iter.next(),
Some(PStrIteratee::PStrSlice {
- slice_loc: heap_index!(1),
+ slice_loc: heap_index!(init_len),
slice_len: "abc ".len()
})
);
assert_eq!(
iter.next(),
Some(PStrIteratee::PStrSlice {
- slice_loc: heap_index!(3),
+ slice_loc: heap_index!(init_len + 2),
slice_len: "def".len(),
})
);
assert!(!iter.is_cyclic());
}
- wam.machine_st.heap[h] = pstr_loc_as_cell!(heap_index!(3));
+ wam.machine_st.heap[h] = pstr_loc_as_cell!(heap_index!(init_len + 2));
{
let mut iter = HeapPStrIter::new(&wam.machine_st.heap, 0);