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.rs11
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);