pub enum GreenTree<'a, L: Language> {
Node(&'a GreenNode<'a, L>),
Leaf(GreenLeaf<L>),
}Expand description
A green tree element - either a node or a leaf kind.
Green trees represent the immutable structure of kind trees without position information.
§Design Note: Lifetimes and References
We use &'a GreenNode<'a, L> instead of an owned GreenNode<'a, L> for two reasons:
- Recursion:
GreenTreeis a recursive structure. To avoid infinite size, we must use a pointer. Since green nodes are allocated in an arena, a reference&'ais the most efficient choice. - Handles: Holding a reference (8 bytes) is much cheaper than holding the whole
GreenNodestruct (24+ bytes), making handles likeRedNodevery lightweight.
Variants§
Implementations§
Source§impl<'a, L: Language> GreenTree<'a, L>
impl<'a, L: Language> GreenTree<'a, L>
Trait Implementations§
impl<'a, L: Language> Copy for GreenTree<'a, L>
impl<'a, L: Language> Eq for GreenTree<'a, L>
Auto Trait Implementations§
impl<'a, L> Freeze for GreenTree<'a, L>
impl<'a, L> RefUnwindSafe for GreenTree<'a, L>
impl<'a, L> Send for GreenTree<'a, L>
impl<'a, L> Sync for GreenTree<'a, L>
impl<'a, L> Unpin for GreenTree<'a, L>
impl<'a, L> UnsafeUnpin for GreenTree<'a, L>
impl<'a, L> UnwindSafe for GreenTree<'a, L>where
<L as Language>::TokenType: UnwindSafe + RefUnwindSafe,
<L as Language>::ElementType: RefUnwindSafe,
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
Mutably borrows from an owned value. Read more