Skip to main content

Box

Struct Box 

Source
pub struct Box<'alloc, T>(/* private fields */)
where
    T: ?Sized;
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<'alloc, T> Box<'alloc, T>

Source

pub fn new_in(value: T, allocator: &impl GetAllocator<'alloc>) -> Box<'alloc, T>

Allocate value into the memory arena, and receive a Box which owns the value.

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

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

The Box cannot outlive the Allocator. This fails to compile:

use oxc_allocator::{Allocator, Box};

let boxed = {
    let allocator = Allocator::default();
    let allocator = &allocator;
    Box::new_in(5, &allocator)
};
assert_eq!(*boxed, 5);
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();
let arena = &arena;

// 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> Box<'_, T>
where T: ?Sized,

Source

pub fn as_non_null(boxed: &Box<'_, T>) -> NonNull<T>

Get a NonNull pointer pointing to the Box’s contents.

The pointer is not valid for writes.

The caller must ensure that the Box outlives the pointer this function returns, or else it will end up dangling.

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

let allocator = Allocator::new();
let allocator = &allocator;
let boxed = Box::new_in(123_u64, &allocator);
let ptr = Box::as_non_null(&boxed);
Source

pub fn into_non_null(boxed: Box<'_, T>) -> NonNull<T>

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

Source

pub const unsafe fn from_non_null(ptr: NonNull<T>) -> Box<'_, T>

Create a Box from a NonNull pointer.

§SAFETY
  • Pointer must point to a valid T.
  • Pointer must point to within an Allocator.
  • Caller must ensure that the pointer is valid for the lifetime of the Box.
Source§

impl<T> Box<'static, [T]>

Source

pub fn new_empty_boxed_slice() -> Box<'static, [T]>

Create a new empty Box<[T]>.

This method does not allocate. The returned boxed slice is represented by a dangling, correctly-aligned pointer with length 0, similar to how Vec::new_in produces an empty vector.

Source§

impl<'alloc, T> Box<'alloc, [T]>

Source

pub fn into_arena_slice(self) -> &'alloc [T]

Convert a boxed slice [Box<[T]>] into slice [&'alloc [T]].

The returned slice has the same lifetime as the allocator.

Source

pub fn into_arena_slice_mut(self) -> &'alloc mut [T]

Convert a boxed slice [Box<[T]>] into mutable slice [&'alloc mut [T]].

The returned slice has the same lifetime as the allocator.

Trait Implementations§

Source§

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

Source§

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

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

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

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_impl( &self, with_semantic_ids: CloneInSemanticIds, allocator: &'new_alloc Allocator, ) -> <Box<'_, T> as CloneIn<'new_alloc>>::Cloned

Clone self into allocator, threading whether semantic ids should be preserved as a runtime with_semantic_ids flag rather than as two separate methods. 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<'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_impl( &self, with_semantic_ids: CloneInSemanticIds, allocator: &'new_alloc Allocator, ) -> <Box<'_, [T]> as CloneIn<'new_alloc>>::Cloned

Clone self into allocator, threading whether semantic ids should be preserved as a runtime with_semantic_ids flag rather than as two separate methods. 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> ContentEq for Box<'_, T>
where T: ContentEq,

Blanket implementation for Box types

Source§

fn content_eq(&self, other: &Box<'_, T>) -> bool

This method tests for contents of self and other to be equal.
Source§

fn content_ne(&self, other: &Self) -> bool

This method tests for contents of self and other not to be equal. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

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

Source§

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

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

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

Source§

type Target = T

The resulting type after dereferencing.
Source§

fn deref(&self) -> &T

Dereferences the value.
Source§

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

Source§

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

Mutably dereferences the value.
Source§

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

Source§

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

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

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

Source§

fn dummy(allocator: &'a Allocator) -> Box<'a, T>

Create a dummy Box.

Source§

impl<'a, T> Dummy<'a> for Box<'a, [T]>

Source§

fn dummy(_allocator: &'a Allocator) -> Box<'a, [T]>

Create a dummy empty [Box<[T]>] boxed slice.

Source§

impl<T> ESTree for Box<'_, T>
where T: ESTree,

Available on crate feature serialize only.
Source§

fn serialize<S>(&self, serializer: S)
where S: Serializer,

Source§

impl<'a, T> From<Vec<'a, T>> for Box<'a, [T]>
where T: 'a,

Source§

fn from(v: Vec<'a, T>) -> Box<'a, [T]>

Converts to this type from the input type.
Source§

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

Source§

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

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 for Box<'_, T>
where T: Hash,

Source§

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

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
Source§

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

Source§

fn replace_with(&mut self, replacer: impl FnOnce(Self) -> Self)

Replace the node in place with the value returned by replacer. Read more
Source§

impl<'a, T> ReplaceWith<'a> for Box<'a, [T]>

Source§

fn replace_with(&mut self, replacer: impl FnOnce(Self) -> Self)

Replace the node in place with the value returned by replacer. Read more
Source§

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

SAFETY: A Box has exclusive access to the T it points to, and grants access to nothing else, so it gets the same auto traits as the &'alloc mut T it stands in for.

Unlike Vec, a Box holds no &Arena. There is no way from a Box to the Allocator it points into, so 2 Boxes on different threads cannot both allocate from the same arena - which is the reason Vec cannot be Send. new_in is the only method which touches an Allocator, and it receives one as a param, so it runs on a thread which has one already.

A Box is never Drop, so sending one to another thread cannot free arena memory there. 'alloc borrows the arena, so it cannot be reset or dropped while a Box into it is alive on any thread.

A T which itself holds arena data keeps its own bound - a Box<Vec<T>> is not Send, because Vec is not.

Source§

impl<T> Serialize for Box<'_, T>
where T: Serialize,

Available on crate feature serialize only.
Source§

fn serialize<S>( &self, serializer: S, ) -> Result<<S as Serializer>::Ok, <S as Serializer>::Error>
where S: Serializer,

Serialize this value into the given Serde serializer. Read more
Source§

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

SAFETY: Sharing a &Box<T> shares only a &T, so T being Sync is what it takes. The Send impl above covers why a Box grants access to nothing else.

Source§

impl<'a, T> TakeIn<'a> for Box<'a, [T]>

Source§

fn take_in(&mut self, allocator_accessor: &impl GetAllocator<'a>) -> Self

Replace node with a dummy, and return the original. Read more
Source§

fn take_in_box( &mut self, allocator_accessor: &impl GetAllocator<'a>, ) -> Box<'a, Self>

Replace node with a dummy, allocate the original node into the arena, and return it as a Box<Self>. 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> Unpin for Box<'alloc, T>
where T: Unpin + ?Sized,

§

impl<'alloc, T> UnsafeUnpin for Box<'alloc, T>
where T: ?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<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
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<D> OwoColorize for D

Source§

fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>
where C: Color,

Set the foreground color generically Read more
Source§

fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>
where C: Color,

Set the background color generically. Read more
Source§

fn black(&self) -> FgColorDisplay<'_, Black, Self>

Change the foreground color to black
Source§

fn on_black(&self) -> BgColorDisplay<'_, Black, Self>

Change the background color to black
Source§

fn red(&self) -> FgColorDisplay<'_, Red, Self>

Change the foreground color to red
Source§

fn on_red(&self) -> BgColorDisplay<'_, Red, Self>

Change the background color to red
Source§

fn green(&self) -> FgColorDisplay<'_, Green, Self>

Change the foreground color to green
Source§

fn on_green(&self) -> BgColorDisplay<'_, Green, Self>

Change the background color to green
Source§

fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>

Change the foreground color to yellow
Source§

fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>

Change the background color to yellow
Source§

fn blue(&self) -> FgColorDisplay<'_, Blue, Self>

Change the foreground color to blue
Source§

fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>

Change the background color to blue
Source§

fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>

Change the foreground color to magenta
Source§

fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>

Change the background color to magenta
Source§

fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>

Change the foreground color to purple
Source§

fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>

Change the background color to purple
Source§

fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>

Change the foreground color to cyan
Source§

fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>

Change the background color to cyan
Source§

fn white(&self) -> FgColorDisplay<'_, White, Self>

Change the foreground color to white
Source§

fn on_white(&self) -> BgColorDisplay<'_, White, Self>

Change the background color to white
Source§

fn default_color(&self) -> FgColorDisplay<'_, Default, Self>

Change the foreground color to the terminal default
Source§

fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>

Change the background color to the terminal default
Source§

fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>

Change the foreground color to bright black
Source§

fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>

Change the background color to bright black
Source§

fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>

Change the foreground color to bright red
Source§

fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>

Change the background color to bright red
Source§

fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>

Change the foreground color to bright green
Source§

fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>

Change the background color to bright green
Source§

fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>

Change the foreground color to bright yellow
Source§

fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>

Change the background color to bright yellow
Source§

fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>

Change the foreground color to bright blue
Source§

fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>

Change the background color to bright blue
Source§

fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>

Change the foreground color to bright magenta
Source§

fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>

Change the background color to bright magenta
Source§

fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>

Change the foreground color to bright purple
Source§

fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>

Change the background color to bright purple
Source§

fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>

Change the foreground color to bright cyan
Source§

fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>

Change the background color to bright cyan
Source§

fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>

Change the foreground color to bright white
Source§

fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>

Change the background color to bright white
Source§

fn bold(&self) -> BoldDisplay<'_, Self>

Make the text bold
Source§

fn dimmed(&self) -> DimDisplay<'_, Self>

Make the text dim
Source§

fn italic(&self) -> ItalicDisplay<'_, Self>

Make the text italicized
Source§

fn underline(&self) -> UnderlineDisplay<'_, Self>

Make the text underlined
Make the text blink
Make the text blink (but fast!)
Source§

fn reversed(&self) -> ReversedDisplay<'_, Self>

Swap the foreground and background colors
Source§

fn hidden(&self) -> HiddenDisplay<'_, Self>

Hide the text
Source§

fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>

Cross out the text
Source§

fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>
where Color: DynColor,

Set the foreground color at runtime. Only use if you do not know which color will be used at compile-time. If the color is constant, use either OwoColorize::fg or a color-specific method, such as OwoColorize::green, Read more
Source§

fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>
where Color: DynColor,

Set the background color at runtime. Only use if you do not know what color to use at compile-time. If the color is constant, use either OwoColorize::bg or a color-specific method, such as OwoColorize::on_yellow, Read more
Source§

fn fg_rgb<const R: u8, const G: u8, const B: u8>( &self, ) -> FgColorDisplay<'_, CustomColor<R, G, B>, Self>

Set the foreground color to a specific RGB value.
Source§

fn bg_rgb<const R: u8, const G: u8, const B: u8>( &self, ) -> BgColorDisplay<'_, CustomColor<R, G, B>, Self>

Set the background color to a specific RGB value.
Source§

fn truecolor(&self, r: u8, g: u8, b: u8) -> FgDynColorDisplay<'_, Rgb, Self>

Sets the foreground color to an RGB value.
Source§

fn on_truecolor(&self, r: u8, g: u8, b: u8) -> BgDynColorDisplay<'_, Rgb, Self>

Sets the background color to an RGB value.
Source§

fn style(&self, style: Style) -> Styled<&Self>

Apply a runtime-determined style
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> ToCompactString for T
where T: Display,

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.