mirror of
https://github.com/danbulant/oxc
synced 2026-05-24 12:21:58 +00:00
refactor(allocator): reorder Box methods (#8654)
Pure refactor. Move `Box::unbox` down. `Box::new_in` is the most important method, so should be at the top.
This commit is contained in:
parent
50295474cc
commit
de76eb1b90
1 changed files with 27 additions and 29 deletions
|
|
@ -31,35 +31,6 @@ use crate::Allocator;
|
||||||
/// with a [`Drop`] type.
|
/// with a [`Drop`] type.
|
||||||
pub struct Box<'alloc, T: ?Sized>(NonNull<T>, PhantomData<(&'alloc (), T)>);
|
pub struct Box<'alloc, T: ?Sized>(NonNull<T>, PhantomData<(&'alloc (), T)>);
|
||||||
|
|
||||||
impl<T> Box<'_, T> {
|
|
||||||
/// Take ownership of the value stored in this [`Box`], consuming the box in
|
|
||||||
/// the process.
|
|
||||||
///
|
|
||||||
/// # Examples
|
|
||||||
/// ```
|
|
||||||
/// use oxc_allocator::{Allocator, Box};
|
|
||||||
///
|
|
||||||
/// let arena = Allocator::default();
|
|
||||||
///
|
|
||||||
/// // Put `5` into the arena and on the heap.
|
|
||||||
/// let boxed: Box<i32> = Box::new_in(5, &arena);
|
|
||||||
/// // Move it back to the stack. `boxed` has been consumed.
|
|
||||||
/// let i = boxed.unbox();
|
|
||||||
///
|
|
||||||
/// assert_eq!(i, 5);
|
|
||||||
/// ```
|
|
||||||
#[inline]
|
|
||||||
pub fn unbox(self) -> T {
|
|
||||||
// SAFETY:
|
|
||||||
// This pointer read is safe because the reference `self.0` is
|
|
||||||
// guaranteed to be unique--not just now, but we're guaranteed it's not
|
|
||||||
// borrowed from some other reference. This in turn is because we never
|
|
||||||
// construct a `Box` with a borrowed reference, only with a fresh
|
|
||||||
// one just allocated from a Bump.
|
|
||||||
unsafe { ptr::read(self.0.as_ptr()) }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<T> Box<'_, T> {
|
impl<T> Box<'_, T> {
|
||||||
/// Put a `value` into a memory arena and get back a [`Box`] with ownership
|
/// Put a `value` into a memory arena and get back a [`Box`] with ownership
|
||||||
/// to the allocation.
|
/// to the allocation.
|
||||||
|
|
@ -97,6 +68,33 @@ impl<T> Box<'_, T> {
|
||||||
|
|
||||||
Self(NonNull::dangling(), PhantomData)
|
Self(NonNull::dangling(), PhantomData)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Take ownership of the value stored in this [`Box`], consuming the box in
|
||||||
|
/// the process.
|
||||||
|
///
|
||||||
|
/// # Examples
|
||||||
|
/// ```
|
||||||
|
/// use oxc_allocator::{Allocator, Box};
|
||||||
|
///
|
||||||
|
/// let arena = Allocator::default();
|
||||||
|
///
|
||||||
|
/// // Put `5` into the arena and on the heap.
|
||||||
|
/// let boxed: Box<i32> = Box::new_in(5, &arena);
|
||||||
|
/// // Move it back to the stack. `boxed` has been consumed.
|
||||||
|
/// let i = boxed.unbox();
|
||||||
|
///
|
||||||
|
/// assert_eq!(i, 5);
|
||||||
|
/// ```
|
||||||
|
#[inline]
|
||||||
|
pub fn unbox(self) -> T {
|
||||||
|
// SAFETY:
|
||||||
|
// This pointer read is safe because the reference `self.0` is
|
||||||
|
// guaranteed to be unique - not just now, but we're guaranteed it's not
|
||||||
|
// borrowed from some other reference. This in turn is because we never
|
||||||
|
// construct a `Box` with a borrowed reference, only with a fresh
|
||||||
|
// one just allocated from a `Bump`.
|
||||||
|
unsafe { ptr::read(self.0.as_ptr()) }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<T: ?Sized> Box<'_, T> {
|
impl<T: ?Sized> Box<'_, T> {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue