Optimize some alloc_from_iter
call sites. · rust-lang/rust@a2051dd (original) (raw)
`@@ -410,15 +410,11 @@ fn expand_format_args<'hir>(
`
410
410
`let format_options = use_format_options.then(|| {
`
411
411
`// Generate:
`
412
412
`// &[format_spec_0, format_spec_1, format_spec_2]
`
413
``
`-
let elements: Vec<_> = fmt
`
414
``
`-
.template
`
415
``
`-
.iter()
`
416
``
`-
.filter_map(|piece| {
`
417
``
`-
let FormatArgsPiece::Placeholder(placeholder) = piece else { return None };
`
418
``
`-
Some(make_format_spec(ctx, macsp, placeholder, &mut argmap))
`
419
``
`-
})
`
420
``
`-
.collect();
`
421
``
`-
ctx.expr_array_ref(macsp, ctx.arena.alloc_from_iter(elements))
`
``
413
`+
let elements = ctx.arena.alloc_from_iter(fmt.template.iter().filter_map(|piece| {
`
``
414
`+
let FormatArgsPiece::Placeholder(placeholder) = piece else { return None };
`
``
415
`+
Some(make_format_spec(ctx, macsp, placeholder, &mut argmap))
`
``
416
`+
}));
`
``
417
`+
ctx.expr_array_ref(macsp, elements)
`
422
418
`});
`
423
419
``
424
420
`let arguments = fmt.arguments.all_args();
`
`@@ -477,10 +473,8 @@ fn expand_format_args<'hir>(
`
477
473
`// core::fmt::Argument::new_debug(&arg2),
`
478
474
`// …
`
479
475
`// ]
`
480
``
`-
let elements: Vec<_> = arguments
`
481
``
`-
.iter()
`
482
``
`-
.zip(argmap)
`
483
``
`-
.map(|(arg, ((_, ty), placeholder_span))| {
`
``
476
`+
let elements = ctx.arena.alloc_from_iter(arguments.iter().zip(argmap).map(
`
``
477
`+
|(arg, ((_, ty), placeholder_span))| {
`
484
478
`let placeholder_span =
`
485
479
` placeholder_span.unwrap_or(arg.expr.span).with_ctxt(macsp.ctxt());
`
486
480
`let arg_span = match arg.kind {
`
`@@ -493,9 +487,9 @@ fn expand_format_args<'hir>(
`
493
487
` hir::ExprKind::AddrOf(hir::BorrowKind::Ref, hir::Mutability::Not, arg),
`
494
488
`));
`
495
489
`make_argument(ctx, placeholder_span, ref_arg, ty)
`
496
``
`-
})
`
497
``
`-
.collect();
`
498
``
`-
ctx.expr_array_ref(macsp, ctx.arena.alloc_from_iter(elements))
`
``
490
`+
},
`
``
491
`+
));
`
``
492
`+
ctx.expr_array_ref(macsp, elements)
`
499
493
`} else {
`
500
494
`// Generate:
`
501
495
`// &match (&arg0, &arg1, &…) {
`
`@@ -528,19 +522,14 @@ fn expand_format_args<'hir>(
`
528
522
`make_argument(ctx, placeholder_span, arg, ty)
`
529
523
`},
`
530
524
`));
`
531
``
`-
let elements: Vec<_> = arguments
`
532
``
`-
.iter()
`
533
``
`-
.map(|arg| {
`
534
``
`-
let arg_expr = ctx.lower_expr(&arg.expr);
`
535
``
`-
ctx.expr(
`
536
``
`-
arg.expr.span.with_ctxt(macsp.ctxt()),
`
537
``
`-
hir::ExprKind::AddrOf(hir::BorrowKind::Ref, hir::Mutability::Not, arg_expr),
`
538
``
`-
)
`
539
``
`-
})
`
540
``
`-
.collect();
`
541
``
`-
let args_tuple = ctx
`
542
``
`-
.arena
`
543
``
`-
.alloc(ctx.expr(macsp, hir::ExprKind::Tup(ctx.arena.alloc_from_iter(elements))));
`
``
525
`+
let elements = ctx.arena.alloc_from_iter(arguments.iter().map(|arg| {
`
``
526
`+
let arg_expr = ctx.lower_expr(&arg.expr);
`
``
527
`+
ctx.expr(
`
``
528
`+
arg.expr.span.with_ctxt(macsp.ctxt()),
`
``
529
`+
hir::ExprKind::AddrOf(hir::BorrowKind::Ref, hir::Mutability::Not, arg_expr),
`
``
530
`+
)
`
``
531
`+
}));
`
``
532
`+
let args_tuple = ctx.arena.alloc(ctx.expr(macsp, hir::ExprKind::Tup(elements)));
`
544
533
`let array = ctx.arena.alloc(ctx.expr(macsp, hir::ExprKind::Array(args)));
`
545
534
`let match_arms = ctx.arena.alloc_from_iter([ctx.arm(args_pat, array)]);
`
546
535
`let match_expr = ctx.arena.alloc(ctx.expr_match(
`