@@ -117,6 +117,7 @@ fn pieces_to_expr(cx: ext_ctxt, sp: span,
117
117
let args = [ cnv_expr, arg] /~;
118
118
ret mk_call( cx, arg. span, path, args) ;
119
119
}
120
+
120
121
fn make_new_conv( cx: ext_ctxt, sp: span, cnv: conv, arg: @ast:: expr) ->
121
122
@ast:: expr {
122
123
// FIXME: Move validation code into core::extfmt (Issue #2249)
@@ -243,13 +244,12 @@ fn pieces_to_expr(cx: ext_ctxt, sp: span,
243
244
}
244
245
let fmt_sp = args[ 0 ] . span;
245
246
let mut n = 0 u;
246
- let mut tmp_expr = mk_str ( cx , sp , "" ) ;
247
- let nargs = vec :: len:: < @ast :: expr > ( args ) ;
247
+ let mut piece_exprs = [ ] /~ ;
248
+ let nargs = args . len( ) ;
248
249
for pieces. each { |pc|
249
250
alt pc {
250
251
piece_string( s) {
251
- let s_expr = mk_str( cx, fmt_sp, s) ;
252
- tmp_expr = mk_binary( cx, fmt_sp, ast:: add, tmp_expr, s_expr) ;
252
+ vec : : push( piece_exprs, mk_str( cx, fmt_sp, s) ) ;
253
253
}
254
254
piece_conv( conv) {
255
255
n += 1 u;
@@ -262,7 +262,7 @@ fn pieces_to_expr(cx: ext_ctxt, sp: span,
262
262
log_conv( conv) ;
263
263
let arg_expr = args[ n] ;
264
264
let c_expr = make_new_conv( cx, fmt_sp, conv, arg_expr) ;
265
- tmp_expr = mk_binary ( cx , fmt_sp , ast :: add , tmp_expr , c_expr) ;
265
+ vec :: push ( piece_exprs , c_expr) ;
266
266
}
267
267
}
268
268
}
@@ -273,7 +273,9 @@ fn pieces_to_expr(cx: ext_ctxt, sp: span,
273
273
( sp, #fmt[ "too many arguments to #fmt. found %u, expected %u" ,
274
274
nargs, expected_nargs] ) ;
275
275
}
276
- ret tmp_expr;
276
+
277
+ let arg_vec = mk_fixed_vec_e ( cx, fmt_sp, piece_exprs) ;
278
+ ret mk_call( cx, fmt_sp, [ @"str", @"concat"] /~, [ arg_vec] /~) ;
277
279
}
278
280
//
279
281
// Local Variables:
0 commit comments