diff options
Diffstat (limited to 'src/libsyntax_ext')
| -rw-r--r-- | src/libsyntax_ext/format.rs | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/src/libsyntax_ext/format.rs b/src/libsyntax_ext/format.rs index c0150e5ce1d..8a329126ca8 100644 --- a/src/libsyntax_ext/format.rs +++ b/src/libsyntax_ext/format.rs @@ -651,21 +651,27 @@ pub fn expand_preparsed_format_args(ecx: &mut ExtCtxt, sp: Span, }; let mut parser = parse::Parser::new(&fmt); + let mut pieces = vec![]; loop { match parser.next() { Some(piece) => { if !parser.errors.is_empty() { break } cx.verify_piece(&piece); - if let Some(piece) = cx.trans_piece(&piece) { - let s = cx.trans_literal_string(); - cx.str_pieces.push(s); - cx.pieces.push(piece); - } + pieces.push(piece); } None => break } } + + for piece in pieces { + if let Some(piece) = cx.trans_piece(&piece) { + let s = cx.trans_literal_string(); + cx.str_pieces.push(s); + cx.pieces.push(piece); + } + } + if !parser.errors.is_empty() { cx.ecx.span_err(cx.fmtsp, &format!("invalid format string: {}", parser.errors.remove(0))); |
