1
Fork 0

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