Struct Box

Source
pub struct Box<'alloc, T: ?Sized>(/* private fields */);
Expand description

A Box without Drop, which stores its data in the arena allocator.

§No Drops

Objects allocated into Oxc memory arenas are never Dropped. Memory is released in bulk when the allocator is dropped, without dropping the individual objects in the arena.

Therefore, it would produce a memory leak if you allocated Drop types into the arena which own memory allocations outside the arena.

Static checks make this impossible to do. Box::new_in will refuse to compile if called with a Drop type.

Implementations§

Source§

impl<T> Box<'_, T>

Source

pub fn new_in(value: T, allocator: &Allocator) -> Self

Put a value into a memory arena and get back a Box with ownership to the allocation.

§Examples
use oxc_allocator::{Allocator, Box};

let arena = Allocator::default();
let in_arena: Box<i32> = Box::new_in(5, &arena);
Source

pub const unsafe fn dangling() -> Self

Create a fake Box with a dangling pointer.

§SAFETY

Safe to create, but must never be dereferenced, as does not point to a valid T. Only purpose is for mocking types without allocating for const assertions.

Source

pub fn unbox(self) -> 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);
Source§

impl<T: ?Sized> Box<'_, T>

Source

pub fn into_non_null(boxed: Self) -> NonNull<T>

Consume a Box and return a NonNull pointer to its contents.

Trait Implementations§

Source§

impl<T: ?Sized> AsMut<T> for Box<'_, T>

Source§

fn as_mut(&mut self) -> &mut T

Converts this type into a mutable reference of the (usually inferred) input type.
Source§

impl<T: ?Sized> AsRef<T> for Box<'_, T>

Source§

fn as_ref(&self) -> &T

Converts this type into a shared reference of the (usually inferred) input type.
Source§

impl<'new_alloc, T, C> CloneIn<'new_alloc> for Box<'_, T>
where T: CloneIn<'new_alloc, Cloned = C>,

Source§

type Cloned = Box<'new_alloc, C>

The type of the cloned object. Read more
Source§

fn clone_in(&self, allocator: &'new_alloc Allocator) -> Self::Cloned

Clone self into the given allocator. allocator may be the same one that self is already in.
Source§

fn clone_in_with_semantic_ids( &self, allocator: &'new_alloc Allocator, ) -> Self::Cloned

Almost identical as clone_in, but for some special type, it will also clone the semantic ids. Please use this method only if you make sure semantic info is synced with the ast node.
Source§

impl<T: ?Sized + Debug> Debug for Box<'_, T>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<T: ?Sized> Deref for Box<'_, T>

Source§

type Target = T

The resulting type after dereferencing.
Source§

fn deref(&self) -> &T

Dereferences the value.
Source§

impl<T: ?Sized> DerefMut for Box<'_, T>

Source§

fn deref_mut(&mut self) -> &mut T

Mutably dereferences the value.
Source§

impl<T: ?Sized + Display> Display for Box<'_, T>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'a, T: Dummy<'a>> Dummy<'a> for Box<'a, T>

Source§

fn dummy(allocator: &'a Allocator) -> Self

Create a dummy Box.

Source§

impl<'a, T> FromIn<'a, T> for Box<'a, T>

Source§

fn from_in(value: T, allocator: &'a Allocator) -> Self

Converts to this type from the input type within the given allocator.
Source§

impl<T> GetAddress for Box<'_, T>

Source§

fn address(&self) -> Address

Get the memory address of a value allocated in the arena.

AST nodes in a Box in an arena are guaranteed to never move in memory, so this address acts as a unique identifier for the duration of the arena’s existence.

Source§

impl<T: Hash> Hash for Box<'_, T>

Source§

fn hash<H: Hasher>(&self, state: &mut H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more

Auto Trait Implementations§

§

impl<'alloc, T> Freeze for Box<'alloc, T>
where T: ?Sized,

§

impl<'alloc, T> RefUnwindSafe for Box<'alloc, T>
where T: RefUnwindSafe + ?Sized,

§

impl<'alloc, T> !Send for Box<'alloc, T>

§

impl<'alloc, T> !Sync for Box<'alloc, T>

§

impl<'alloc, T> Unpin for Box<'alloc, T>
where T: Unpin + ?Sized,

§

impl<'alloc, T> UnwindSafe for Box<'alloc, T>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<'a, T> FromIn<'a, T> for T

Source§

fn from_in(t: T, _: &'a Allocator) -> T

Converts to this type from the input type within the given allocator.
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<'a, T, U> IntoIn<'a, U> for T
where U: FromIn<'a, T>,

Source§

fn into_in(self, allocator: &'a Allocator) -> U

Converts this type into the (usually inferred) input type within the given allocator.
Source§

impl<P, T> Receiver for P
where P: Deref<Target = T> + ?Sized, T: ?Sized,

Source§

type Target = T

🔬This is a nightly-only experimental API. (arbitrary_self_types)
The target type on which the method may be called.
Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.