]> git.lizzy.rs Git - rust.git/commitdiff
Prevent some vector reallocations
authorBrendan Zabarauskas <bjzaba@yahoo.com.au>
Wed, 22 Oct 2014 14:42:47 +0000 (01:42 +1100)
committerBrendan Zabarauskas <bjzaba@yahoo.com.au>
Sat, 25 Oct 2014 22:53:30 +0000 (09:53 +1100)
src/libsyntax/ext/quote.rs
src/libsyntax/ext/tt/transcribe.rs

index 93bd66d6eeba6da690dad96de0e9519fa22c9d9a..baba38d8cbb32cca96cab40d53b772c64a3a2872 100644 (file)
@@ -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) => {
index e705c4d8b33c770438ef2ba69e8ac127af5ec37d..c0b66851dfe3ff5ff13e35ef5d2892dca79f76fa 100644 (file)
@@ -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