Extend substs_to_args into a perfectly-sized Vec almost every time

This commit is contained in:
Michael Howell
2022-05-20 08:48:17 -07:00
parent 08237d8a6d
commit 3657d0936f

View File

@@ -80,9 +80,9 @@ pub(crate) fn substs_to_args(
substs: &[ty::subst::GenericArg<'_>],
mut skip_first: bool,
) -> Vec<GenericArg> {
substs
.iter()
.filter_map(|kind| match kind.unpack() {
let mut ret_val =
Vec::with_capacity(substs.len().saturating_sub(if skip_first { 1 } else { 0 }));
ret_val.extend(substs.iter().filter_map(|kind| match kind.unpack() {
GenericArgKind::Lifetime(lt) => match *lt {
ty::ReLateBound(_, ty::BoundRegion { kind: ty::BrAnon(_), .. }) => {
Some(GenericArg::Lifetime(Lifetime::elided()))
@@ -95,8 +95,8 @@ pub(crate) fn substs_to_args(
}
GenericArgKind::Type(ty) => Some(GenericArg::Type(ty.clean(cx))),
GenericArgKind::Const(ct) => Some(GenericArg::Const(Box::new(ct.clean(cx)))),
})
.collect()
}));
ret_val
}
fn external_generic_args(