% maplist isn't
% declared as a
% meta-predicate yet
- '$debug_hook',
catch(lists:maplist(Selector, Options, OptionPairs0),
error(E, _),
builtins:throw(error(E, Stub))) ->
}
)
}
+
+#[cfg(test)]
+mod test {
+ use super::*;
+
+ #[test]
+ fn heap_manipulation() {
+ let mut heap = Heap::new();
+
+ for idx in 0 .. 10 {
+ heap.push_cell(heap_loc_as_cell!(idx)).unwrap();
+ }
+ }
+}
unifier.unify_atom(atom, value);
}
- pub fn unify_list(&mut self, l1: usize, value: HeapCellValue) {
- let mut unifier = DefaultUnifier::from(self);
- unifier.unify_list(l1, value);
- }
-
- pub fn unify_partial_string(&mut self, pstr_loc: usize, value: HeapCellValue) {
- let mut unifier = DefaultUnifier::from(self);
- unifier.unify_partial_string(pstr_loc, value);
- }
-
pub fn unify_char(&mut self, c: char, value: HeapCellValue) {
let mut unifier = DefaultUnifier::from(self);
unifier.unify_char(c, value);
for idx in 0..num_cells {
ptr::write(
- (new_ptr as usize + offset) as *mut HeapCellValue,
+ new_ptr.byte_add(offset) as *mut HeapCellValue,
stack_loc_as_cell!(OrFrame, b, idx),
);
#[inline(always)]
pub fn as_ptr(self) -> *mut u8 {
- let addr: u64 = self.ptr();
- addr as usize as *mut _
+ unsafe { mem::transmute::<_, *mut u8>(self.ptr()) }
}
#[inline(always)]
}
#[inline]
- pub fn get_ptr(self) -> *const u8 {
- let addr: u64 = self.ptr();
- addr as usize as *const u8
+ pub fn get_ptr(self) -> *const ArenaHeader {
+ unsafe { mem::transmute::<_, *const ArenaHeader>(self.ptr()) }
}
#[inline]
pub fn get_tag(self) -> ArenaHeaderTag {
unsafe {
debug_assert!(!self.get_ptr().is_null());
- let header = *(self.get_ptr() as *const ArenaHeader);
+ let header = *self.get_ptr();
header.get_tag()
}
}
#[inline]
pub fn payload_offset(self) -> *const u8 {
- unsafe { self.get_ptr().add(mem::size_of::<ArenaHeader>()) }
+ unsafe { self.get_ptr().byte_add(mem::size_of::<ArenaHeader>()) as *const _ }
}
/// # Safety