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>
impl<'alloc, T> Box<'alloc, T>
Sourcepub fn new_in(value: T, allocator: &impl GetAllocator<'alloc>) -> Box<'alloc, T>
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);Sourcepub fn unbox(self) -> T
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,
impl<T> Box<'_, T>where
T: ?Sized,
Sourcepub fn as_non_null(boxed: &Box<'_, T>) -> NonNull<T>
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);Sourcepub fn into_non_null(boxed: Box<'_, T>) -> NonNull<T>
pub fn into_non_null(boxed: Box<'_, T>) -> NonNull<T>
Source§impl<T> Box<'static, [T]>
impl<T> Box<'static, [T]>
Sourcepub fn new_empty_boxed_slice() -> Box<'static, [T]>
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]>
impl<'alloc, T> Box<'alloc, [T]>
Sourcepub fn into_arena_slice(self) -> &'alloc [T]
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.
Sourcepub fn into_arena_slice_mut(self) -> &'alloc mut [T]
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<'new_alloc, T, C> CloneIn<'new_alloc> for Box<'_, T>where
T: CloneIn<'new_alloc, Cloned = C>,
impl<'new_alloc, T, C> CloneIn<'new_alloc> for Box<'_, T>where
T: CloneIn<'new_alloc, Cloned = C>,
Source§fn clone_in_impl(
&self,
with_semantic_ids: CloneInSemanticIds,
allocator: &'new_alloc Allocator,
) -> <Box<'_, T> as CloneIn<'new_alloc>>::Cloned
fn clone_in_impl( &self, with_semantic_ids: CloneInSemanticIds, allocator: &'new_alloc Allocator, ) -> <Box<'_, T> as CloneIn<'new_alloc>>::Cloned
self into allocator, threading whether semantic ids should be preserved as a
runtime with_semantic_ids flag rather than as two separate methods. Read moreSource§fn clone_in(&self, allocator: &'new_alloc Allocator) -> Self::Cloned
fn clone_in(&self, allocator: &'new_alloc Allocator) -> Self::Cloned
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
fn clone_in_with_semantic_ids( &self, allocator: &'new_alloc Allocator, ) -> Self::Cloned
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>,
impl<'new_alloc, T, C> CloneIn<'new_alloc> for Box<'_, [T]>where
T: CloneIn<'new_alloc, Cloned = C>,
Source§fn clone_in_impl(
&self,
with_semantic_ids: CloneInSemanticIds,
allocator: &'new_alloc Allocator,
) -> <Box<'_, [T]> as CloneIn<'new_alloc>>::Cloned
fn clone_in_impl( &self, with_semantic_ids: CloneInSemanticIds, allocator: &'new_alloc Allocator, ) -> <Box<'_, [T]> as CloneIn<'new_alloc>>::Cloned
self into allocator, threading whether semantic ids should be preserved as a
runtime with_semantic_ids flag rather than as two separate methods. Read moreSource§fn clone_in(&self, allocator: &'new_alloc Allocator) -> Self::Cloned
fn clone_in(&self, allocator: &'new_alloc Allocator) -> Self::Cloned
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
fn clone_in_with_semantic_ids( &self, allocator: &'new_alloc Allocator, ) -> Self::Cloned
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
impl<T> ContentEq for Box<'_, T>where
T: ContentEq,
Blanket implementation for Box types
Source§fn content_eq(&self, other: &Box<'_, T>) -> bool
fn content_eq(&self, other: &Box<'_, T>) -> bool
self and other to be equal.Source§fn content_ne(&self, other: &Self) -> bool
fn content_ne(&self, other: &Self) -> bool
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> ESTree for Box<'_, T>where
T: ESTree,
Available on crate feature serialize only.
impl<T> ESTree for Box<'_, T>where
T: ESTree,
serialize only.fn serialize<S>(&self, serializer: S)where
S: Serializer,
Source§impl<T> GetAddress for Box<'_, T>
impl<T> GetAddress for Box<'_, T>
Source§impl<'a, T> ReplaceWith<'a> for Box<'a, T>where
T: Dummy<'a>,
impl<'a, T> ReplaceWith<'a> for Box<'a, T>where
T: Dummy<'a>,
Source§fn replace_with(&mut self, replacer: impl FnOnce(Self) -> Self)
fn replace_with(&mut self, replacer: impl FnOnce(Self) -> Self)
replacer. Read moreSource§impl<'a, T> ReplaceWith<'a> for Box<'a, [T]>
impl<'a, T> ReplaceWith<'a> for Box<'a, [T]>
Source§fn replace_with(&mut self, replacer: impl FnOnce(Self) -> Self)
fn replace_with(&mut self, replacer: impl FnOnce(Self) -> Self)
replacer. Read moreimpl<T> Send for Box<'_, T>
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.
impl<T> Serialize for Box<'_, T>where
T: Serialize,
serialize only.Source§fn serialize<S>(
&self,
serializer: S,
) -> Result<<S as Serializer>::Ok, <S as Serializer>::Error>where
S: Serializer,
fn serialize<S>(
&self,
serializer: S,
) -> Result<<S as Serializer>::Ok, <S as Serializer>::Error>where
S: Serializer,
impl<T> Sync for Box<'_, T>
Source§impl<'a, T> TakeIn<'a> for Box<'a, [T]>
impl<'a, T> TakeIn<'a> for Box<'a, [T]>
Source§fn take_in(&mut self, allocator_accessor: &impl GetAllocator<'a>) -> Self
fn take_in(&mut self, allocator_accessor: &impl GetAllocator<'a>) -> Self
Source§fn take_in_box(
&mut self,
allocator_accessor: &impl GetAllocator<'a>,
) -> Box<'a, Self>
fn take_in_box( &mut self, allocator_accessor: &impl GetAllocator<'a>, ) -> Box<'a, Self>
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>
impl<'alloc, T> UnsafeUnpin for Box<'alloc, T>where
T: ?Sized,
impl<'alloc, T> UnwindSafe for Box<'alloc, T>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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 moreSource§impl<D> OwoColorize for D
impl<D> OwoColorize for D
Source§fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
Source§fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
Source§fn black(&self) -> FgColorDisplay<'_, Black, Self>
fn black(&self) -> FgColorDisplay<'_, Black, Self>
Source§fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
Source§fn red(&self) -> FgColorDisplay<'_, Red, Self>
fn red(&self) -> FgColorDisplay<'_, Red, Self>
Source§fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
Source§fn green(&self) -> FgColorDisplay<'_, Green, Self>
fn green(&self) -> FgColorDisplay<'_, Green, Self>
Source§fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
Source§fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
Source§fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
Source§fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
Source§fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
Source§fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
Source§fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
Source§fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
Source§fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
Source§fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
Source§fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
Source§fn white(&self) -> FgColorDisplay<'_, White, Self>
fn white(&self) -> FgColorDisplay<'_, White, Self>
Source§fn on_white(&self) -> BgColorDisplay<'_, White, Self>
fn on_white(&self) -> BgColorDisplay<'_, White, Self>
Source§fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
Source§fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
Source§fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
Source§fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
Source§fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
Source§fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
Source§fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
Source§fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
Source§fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
Source§fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
Source§fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
Source§fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
Source§fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Source§fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Source§fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Source§fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Source§fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
Source§fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
Source§fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
Source§fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
Source§fn bold(&self) -> BoldDisplay<'_, Self>
fn bold(&self) -> BoldDisplay<'_, Self>
Source§fn dimmed(&self) -> DimDisplay<'_, Self>
fn dimmed(&self) -> DimDisplay<'_, Self>
Source§fn italic(&self) -> ItalicDisplay<'_, Self>
fn italic(&self) -> ItalicDisplay<'_, Self>
Source§fn underline(&self) -> UnderlineDisplay<'_, Self>
fn underline(&self) -> UnderlineDisplay<'_, Self>
Source§fn blink(&self) -> BlinkDisplay<'_, Self>
fn blink(&self) -> BlinkDisplay<'_, Self>
Source§fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
Source§fn reversed(&self) -> ReversedDisplay<'_, Self>
fn reversed(&self) -> ReversedDisplay<'_, Self>
Source§fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
Source§fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::fg or
a color-specific method, such as OwoColorize::green, Read moreSource§fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::bg or
a color-specific method, such as OwoColorize::on_yellow, Read moreSource§fn fg_rgb<const R: u8, const G: u8, const B: u8>(
&self,
) -> FgColorDisplay<'_, CustomColor<R, G, B>, Self>
fn fg_rgb<const R: u8, const G: u8, const B: u8>( &self, ) -> FgColorDisplay<'_, CustomColor<R, G, B>, Self>
Source§fn bg_rgb<const R: u8, const G: u8, const B: u8>(
&self,
) -> BgColorDisplay<'_, CustomColor<R, G, B>, Self>
fn bg_rgb<const R: u8, const G: u8, const B: u8>( &self, ) -> BgColorDisplay<'_, CustomColor<R, G, B>, Self>
Source§fn truecolor(&self, r: u8, g: u8, b: u8) -> FgDynColorDisplay<'_, Rgb, Self>
fn truecolor(&self, r: u8, g: u8, b: u8) -> FgDynColorDisplay<'_, Rgb, Self>
Source§fn on_truecolor(&self, r: u8, g: u8, b: u8) -> BgDynColorDisplay<'_, Rgb, Self>
fn on_truecolor(&self, r: u8, g: u8, b: u8) -> BgDynColorDisplay<'_, Rgb, Self>
Source§impl<T> ToCompactString for Twhere
T: Display,
impl<T> ToCompactString for Twhere
T: Display,
Source§fn try_to_compact_string(&self) -> Result<CompactString, ToCompactStringError>
fn try_to_compact_string(&self) -> Result<CompactString, ToCompactStringError>
ToCompactString::to_compact_string() Read moreSource§fn to_compact_string(&self) -> CompactString
fn to_compact_string(&self) -> CompactString
CompactString. Read more