Have #fmt use str::concat to build up the string instead of using binary +. Closes #2746.
This commit is contained in:
parent
b2b498183a
commit
e9382ef1ac
2 changed files with 12 additions and 6 deletions
|
@ -72,6 +72,10 @@ fn mk_uniq_vec_e(cx: ext_ctxt, sp: span, exprs: [@ast::expr]/~) ->
|
|||
@ast::expr {
|
||||
mk_vstore_e(cx, sp, mk_vec_e(cx, sp, exprs), ast::vstore_uniq)
|
||||
}
|
||||
fn mk_fixed_vec_e(cx: ext_ctxt, sp: span, exprs: [@ast::expr]/~) ->
|
||||
@ast::expr {
|
||||
mk_vstore_e(cx, sp, mk_vec_e(cx, sp, exprs), ast::vstore_fixed(none))
|
||||
}
|
||||
|
||||
fn mk_rec_e(cx: ext_ctxt, sp: span,
|
||||
fields: [{ident: ast::ident, ex: @ast::expr}]/~) ->
|
||||
|
|
|
@ -117,6 +117,7 @@ fn pieces_to_expr(cx: ext_ctxt, sp: span,
|
|||
let args = [cnv_expr, arg]/~;
|
||||
ret mk_call(cx, arg.span, path, args);
|
||||
}
|
||||
|
||||
fn make_new_conv(cx: ext_ctxt, sp: span, cnv: conv, arg: @ast::expr) ->
|
||||
@ast::expr {
|
||||
// FIXME: Move validation code into core::extfmt (Issue #2249)
|
||||
|
@ -243,13 +244,12 @@ fn pieces_to_expr(cx: ext_ctxt, sp: span,
|
|||
}
|
||||
let fmt_sp = args[0].span;
|
||||
let mut n = 0u;
|
||||
let mut tmp_expr = mk_str(cx, sp, "");
|
||||
let nargs = vec::len::<@ast::expr>(args);
|
||||
let mut piece_exprs = []/~;
|
||||
let nargs = args.len();
|
||||
for pieces.each {|pc|
|
||||
alt pc {
|
||||
piece_string(s) {
|
||||
let s_expr = mk_str(cx, fmt_sp, s);
|
||||
tmp_expr = mk_binary(cx, fmt_sp, ast::add, tmp_expr, s_expr);
|
||||
vec::push(piece_exprs, mk_str(cx, fmt_sp, s));
|
||||
}
|
||||
piece_conv(conv) {
|
||||
n += 1u;
|
||||
|
@ -262,7 +262,7 @@ fn pieces_to_expr(cx: ext_ctxt, sp: span,
|
|||
log_conv(conv);
|
||||
let arg_expr = args[n];
|
||||
let c_expr = make_new_conv(cx, fmt_sp, conv, arg_expr);
|
||||
tmp_expr = mk_binary(cx, fmt_sp, ast::add, tmp_expr, c_expr);
|
||||
vec::push(piece_exprs, c_expr);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -273,7 +273,9 @@ fn pieces_to_expr(cx: ext_ctxt, sp: span,
|
|||
(sp, #fmt["too many arguments to #fmt. found %u, expected %u",
|
||||
nargs, expected_nargs]);
|
||||
}
|
||||
ret tmp_expr;
|
||||
|
||||
let arg_vec = mk_fixed_vec_e(cx, fmt_sp, piece_exprs);
|
||||
ret mk_call(cx, fmt_sp, [@"str", @"concat"]/~, [arg_vec]/~);
|
||||
}
|
||||
//
|
||||
// Local Variables:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue