retrieve F64 behind Cons tags properly (#1369)
This commit is contained in:
@@ -87,10 +87,21 @@ macro_rules! cell_as_atom_cell {
|
|||||||
|
|
||||||
macro_rules! cell_as_f64_ptr {
|
macro_rules! cell_as_f64_ptr {
|
||||||
($cell:expr) => {{
|
($cell:expr) => {{
|
||||||
let ptr_u64 = ConsPtr::from_bytes($cell.into_bytes());
|
let cons_ptr = ConsPtr::from_bytes($cell.into_bytes());
|
||||||
F64Ptr(TypedArenaPtr::new(
|
|
||||||
ptr_u64.as_ptr() as *mut OrderedFloat<f64>
|
match cons_ptr.get_tag() {
|
||||||
))
|
ConsPtrMaskTag::F64 => {
|
||||||
|
F64Ptr(TypedArenaPtr::new(
|
||||||
|
cons_ptr.as_ptr() as *mut OrderedFloat<f64>
|
||||||
|
))
|
||||||
|
}
|
||||||
|
ConsPtrMaskTag::Cons => {
|
||||||
|
let ptr = cell_as_untyped_arena_ptr!($cell).payload_offset();
|
||||||
|
unsafe {
|
||||||
|
F64Ptr(TypedArenaPtr::new(std::mem::transmute(ptr)))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}};
|
}};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -87,10 +87,15 @@ impl ConsPtr {
|
|||||||
.with_tag(tag)
|
.with_tag(tag)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline(always)]
|
||||||
pub fn as_ptr(self) -> *mut u8 {
|
pub fn as_ptr(self) -> *mut u8 {
|
||||||
self.ptr() as *mut _
|
self.ptr() as *mut _
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[inline(always)]
|
||||||
|
pub fn get_tag(self) -> ConsPtrMaskTag {
|
||||||
|
self.tag()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(BitfieldSpecifier, Copy, Clone, Debug)]
|
#[derive(BitfieldSpecifier, Copy, Clone, Debug)]
|
||||||
|
|||||||
Reference in New Issue
Block a user