Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/tt/src/lib.rs')
| -rw-r--r-- | crates/tt/src/lib.rs | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/crates/tt/src/lib.rs b/crates/tt/src/lib.rs index 462cae6de3..855459dc85 100644 --- a/crates/tt/src/lib.rs +++ b/crates/tt/src/lib.rs @@ -77,6 +77,17 @@ impl<S: Span> Subtree<S> { Subtree { delimiter: Delimiter::invisible_delim_spanned(span), token_trees: Box::new([]) } } + /// This is slow, and should be avoided, as it will always reallocate! + pub fn push(&mut self, subtree: TokenTree<S>) { + let mut mutable_trees = std::mem::take(&mut self.token_trees).into_vec(); + + // Reserve exactly space for one element, to avoid `into_boxed_slice` having to reallocate again. + mutable_trees.reserve_exact(1); + mutable_trees.push(subtree); + + self.token_trees = mutable_trees.into_boxed_slice(); + } + pub fn visit_ids(&mut self, f: &mut impl FnMut(S) -> S) { self.delimiter.open = f(self.delimiter.open); self.delimiter.close = f(self.delimiter.close); |