From 6a50b4d018b0e44b9e12560030ca7fb240107a68 Mon Sep 17 00:00:00 2001 From: Brendan Zabarauskas Date: Thu, 23 Oct 2014 01:42:47 +1100 Subject: Prevent some vector reallocations --- src/libsyntax/ext/quote.rs | 9 ++++----- src/libsyntax/ext/tt/transcribe.rs | 12 ++++++------ 2 files changed, 10 insertions(+), 11 deletions(-) (limited to 'src/libsyntax') 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> { 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 -- cgit 1.4.1-3-g733a5