mirror of
https://github.com/roc-lang/roc.git
synced 2025-09-26 13:29:12 +00:00
add LayoutRepr::Ptr
This commit is contained in:
parent
a9f7961b52
commit
17512873e8
18 changed files with 62 additions and 8 deletions
|
@ -675,6 +675,7 @@ pub enum LayoutRepr<'a> {
|
|||
Builtin(Builtin<'a>),
|
||||
Struct(&'a [InLayout<'a>]),
|
||||
Boxed(InLayout<'a>),
|
||||
Ptr(InLayout<'a>),
|
||||
Union(UnionLayout<'a>),
|
||||
LambdaSet(LambdaSet<'a>),
|
||||
RecursivePointer(InLayout<'a>),
|
||||
|
@ -2555,7 +2556,7 @@ impl<'a> LayoutRepr<'a> {
|
|||
LambdaSet(lambda_set) => interner
|
||||
.get_repr(lambda_set.runtime_representation())
|
||||
.safe_to_memcpy(interner),
|
||||
Boxed(_) | RecursivePointer(_) => {
|
||||
Boxed(_) | Ptr(_) | RecursivePointer(_) => {
|
||||
// We cannot memcpy pointers, because then we would have the same pointer in multiple places!
|
||||
false
|
||||
}
|
||||
|
@ -2646,6 +2647,7 @@ impl<'a> LayoutRepr<'a> {
|
|||
.stack_size_without_alignment(interner),
|
||||
RecursivePointer(_) => interner.target_info().ptr_width() as u32,
|
||||
Boxed(_) => interner.target_info().ptr_width() as u32,
|
||||
Ptr(_) => interner.target_info().ptr_width() as u32,
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2699,6 +2701,7 @@ impl<'a> LayoutRepr<'a> {
|
|||
Builtin(builtin) => builtin.alignment_bytes(interner.target_info()),
|
||||
RecursivePointer(_) => interner.target_info().ptr_width() as u32,
|
||||
Boxed(_) => interner.target_info().ptr_width() as u32,
|
||||
Ptr(_) => interner.target_info().ptr_width() as u32,
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2723,6 +2726,7 @@ impl<'a> LayoutRepr<'a> {
|
|||
ptr_width,
|
||||
interner.get_repr(*inner).alignment_bytes(interner),
|
||||
),
|
||||
Ptr(inner) => interner.get_repr(*inner).alignment_bytes(interner),
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2776,6 +2780,7 @@ impl<'a> LayoutRepr<'a> {
|
|||
.contains_refcounted(interner),
|
||||
RecursivePointer(_) => true,
|
||||
Boxed(_) => true,
|
||||
Ptr(inner) => interner.get_repr(*inner).contains_refcounted(interner),
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2831,7 +2836,7 @@ impl<'a> LayoutRepr<'a> {
|
|||
}
|
||||
},
|
||||
LambdaSet(_) => return true,
|
||||
Boxed(_) => {
|
||||
Boxed(_) | Ptr(_) => {
|
||||
// If there's any layer of indirection (behind a pointer), then it doesn't vary!
|
||||
}
|
||||
RecursivePointer(_) => {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue