Prevent re-allocation in CallableSig::from_params_and_return

This commit is contained in:
Lukas Wirth 2024-06-21 19:26:08 +02:00
parent 34ba8db3ed
commit 4c62e6b05f
2 changed files with 9 additions and 8 deletions

View file

@ -513,14 +513,16 @@ pub type PolyFnSig = Binders<CallableSig>;
impl CallableSig {
pub fn from_params_and_return(
mut params: Vec<Ty>,
params: impl ExactSizeIterator<Item = Ty>,
ret: Ty,
is_varargs: bool,
safety: Safety,
abi: FnAbi,
) -> CallableSig {
params.push(ret);
CallableSig { params_and_return: params.into(), is_varargs, safety, abi }
let mut params_and_return = Vec::with_capacity(params.len() + 1);
params_and_return.extend(params);
params_and_return.push(ret);
CallableSig { params_and_return: params_and_return.into(), is_varargs, safety, abi }
}
pub fn from_def(db: &dyn HirDatabase, def: FnDefId, substs: &Substitution) -> CallableSig {
@ -935,8 +937,7 @@ pub fn callable_sig_from_fn_trait(
.as_tuple()?
.iter(Interner)
.map(|it| it.assert_ty_ref(Interner))
.cloned()
.collect();
.cloned();
return Some((
fn_x,