Skip to main content

TwoBufferBumpAllocator

Struct TwoBufferBumpAllocator 

Source
pub struct TwoBufferBumpAllocator { /* private fields */ }
Expand description

Two-buffer bump allocator system for safe multi-pass compilation

This system solves several problems with the original single-buffer approach:

  1. Enables intermediate memory cleanup between passes
  2. Prevents stack overflow through controlled recursion depth
  3. Provides safe lifetime management for buffer swapping
  4. Maintains performance benefits of bump allocation

Implementations§

Source§

impl TwoBufferBumpAllocator

Source

pub fn new() -> Self

Creates a new two-buffer allocator system

Source

pub fn current(&self) -> &Bump

Gets the current active buffer

Source

pub fn next(&self) -> &Bump

Gets the next buffer (for output of current pass)

Source

pub fn swap_and_clear(self) -> Self

Swaps buffers and clears the now-unused buffer Returns a new instance with swapped buffers for safe lifetime management

Source

pub fn with_max_recursion_depth(self, depth: usize) -> Self

Sets maximum recursion depth for stack overflow protection

Source

pub fn max_recursion_depth(&self) -> usize

Gets maximum recursion depth

Trait Implementations§

Source§

impl Debug for TwoBufferBumpAllocator

Source§

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

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

impl Default for TwoBufferBumpAllocator

Source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

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<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, 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.