about summary refs log tree commit diff
path: root/src/libsyntax
diff options
context:
space:
mode:
authorBrendan Zabarauskas <bjzaba@yahoo.com.au>2014-10-23 01:42:47 +1100
committerBrendan Zabarauskas <bjzaba@yahoo.com.au>2014-10-26 09:53:30 +1100
commit6a50b4d018b0e44b9e12560030ca7fb240107a68 (patch)
treeab6b058b3e3c29a971d440d7266c4f6623851994 /src/libsyntax
parentec3f0201e76b5cf689f3e8e6418435c3e6d9271c (diff)
downloadrust-6a50b4d018b0e44b9e12560030ca7fb240107a68.tar.gz
rust-6a50b4d018b0e44b9e12560030ca7fb240107a68.zip
Prevent some vector reallocations
Diffstat (limited to 'src/libsyntax')
-rw-r--r--src/libsyntax/ext/quote.rs9
-rw-r--r--src/libsyntax/ext/tt/transcribe.rs12
2 files changed, 10 insertions, 11 deletions
diff --git a/src/libsyntax/ext/quote.rs b/src/libsyntax/ext/quote.rs
index 93bd66d6eeb..baba38d8cbb 100644
--- a/src/libsyntax/ext/quote.rs
+++ b/src/libsyntax/ext/quote.rs
@@ -652,11 +652,10 @@ fn mk_tt(cx: &ExtCtxt, _: Span, tt: &ast::TokenTree) -> Vec<P<ast::Stmt>> {
             vec!(cx.stmt_expr(e_push))
         },
         ast::TTDelimited(sp, ref open, ref tts, ref close) => {
-            let mut stmts = vec![];
-            stmts.extend(mk_tt(cx, sp, &open.to_tt()).into_iter());
-            stmts.extend(tts.iter().flat_map(|tt| mk_tt(cx, sp, tt).into_iter()));
-            stmts.extend(mk_tt(cx, sp, &close.to_tt()).into_iter());
-            stmts
+            mk_tt(cx, sp, &open.to_tt()).into_iter()
+                .chain(tts.iter().flat_map(|tt| mk_tt(cx, sp, tt).into_iter()))
+                .chain(mk_tt(cx, sp, &close.to_tt()).into_iter())
+                .collect()
         },
         ast::TTSequence(..) => fail!("TTSequence in quote!"),
         ast::TTNonterminal(sp, ident) => {
diff --git a/src/libsyntax/ext/tt/transcribe.rs b/src/libsyntax/ext/tt/transcribe.rs
index e705c4d8b33..c0b66851dfe 100644
--- a/src/libsyntax/ext/tt/transcribe.rs
+++ b/src/libsyntax/ext/tt/transcribe.rs
@@ -202,14 +202,14 @@ pub fn tt_next_token(r: &mut TtReader) -> TokenAndSpan {
             (*frame.forest)[frame.idx].clone()
         };
         match t {
-            TTDelimited(_, open, delimed_tts, close) => {
-                let mut tts = vec![];
-                tts.push(open.to_tt());
-                tts.extend(delimed_tts.iter().map(|x| (*x).clone()));
-                tts.push(close.to_tt());
+            TTDelimited(_, open, tts, close) => {
+                let mut forest = Vec::with_capacity(1 + tts.len() + 1);
+                forest.push(open.to_tt());
+                forest.extend(tts.iter().map(|x| (*x).clone()));
+                forest.push(close.to_tt());
 
                 r.stack.push(TtFrame {
-                    forest: Rc::new(tts),
+                    forest: Rc::new(forest),
                     idx: 0,
                     dotdotdoted: false,
                     sep: None