Remove some allocs
This commit is contained in:
parent
13890697eb
commit
336dee3415
@ -603,15 +603,17 @@ pub enum ImplTraitId {
|
||||
}
|
||||
impl_intern_value_trivial!(ImplTraitId);
|
||||
|
||||
#[derive(Clone, PartialEq, Eq, Debug, Hash)]
|
||||
#[derive(PartialEq, Eq, Debug, Hash)]
|
||||
pub struct ImplTraits {
|
||||
pub(crate) impl_traits: Arena<ImplTrait>,
|
||||
}
|
||||
|
||||
has_interner!(ImplTraits);
|
||||
|
||||
#[derive(Clone, PartialEq, Eq, Debug, Hash)]
|
||||
#[derive(PartialEq, Eq, Debug, Hash)]
|
||||
pub struct ImplTrait {
|
||||
// FIXME: Should be Arc<[QuantifiedWhereClause]>, but the HasInterner impl for Arc is missing a
|
||||
// ?Sized bound
|
||||
pub(crate) bounds: Binders<Vec<QuantifiedWhereClause>>,
|
||||
}
|
||||
|
||||
|
@ -316,7 +316,7 @@ pub fn lower_ty_ext(&self, type_ref: &TypeRef) -> (Ty, Option<TypeNs>) {
|
||||
// place even if we encounter more opaque types while
|
||||
// lowering the bounds
|
||||
let idx = opaque_type_data.borrow_mut().alloc(ImplTrait {
|
||||
bounds: crate::make_single_type_binders(Vec::new()),
|
||||
bounds: crate::make_single_type_binders(Vec::default()),
|
||||
});
|
||||
// We don't want to lower the bounds inside the binders
|
||||
// we're currently in, because they don't end up inside
|
||||
@ -1007,11 +1007,11 @@ fn trait_ref_substs_from_path(
|
||||
self.substs_from_path_segment(segment, Some(resolved.into()), false, explicit_self_ty)
|
||||
}
|
||||
|
||||
pub(crate) fn lower_where_predicate(
|
||||
&self,
|
||||
where_predicate: &WherePredicate,
|
||||
pub(crate) fn lower_where_predicate<'b>(
|
||||
&'b self,
|
||||
where_predicate: &'b WherePredicate,
|
||||
ignore_bindings: bool,
|
||||
) -> impl Iterator<Item = QuantifiedWhereClause> {
|
||||
) -> impl Iterator<Item = QuantifiedWhereClause> + 'b {
|
||||
match where_predicate {
|
||||
WherePredicate::ForLifetime { target, bound, .. }
|
||||
| WherePredicate::TypeBound { target, bound } => {
|
||||
@ -1034,19 +1034,17 @@ pub(crate) fn lower_where_predicate(
|
||||
.intern(Interner)
|
||||
}
|
||||
};
|
||||
self.lower_type_bound(bound, self_ty, ignore_bindings)
|
||||
.collect::<Vec<_>>()
|
||||
.into_iter()
|
||||
Either::Left(self.lower_type_bound(bound, self_ty, ignore_bindings))
|
||||
}
|
||||
WherePredicate::Lifetime { bound, target } => {
|
||||
vec![crate::wrap_empty_binders(WhereClause::LifetimeOutlives(LifetimeOutlives {
|
||||
WherePredicate::Lifetime { bound, target } => Either::Right(iter::once(
|
||||
crate::wrap_empty_binders(WhereClause::LifetimeOutlives(LifetimeOutlives {
|
||||
a: self.lower_lifetime(bound),
|
||||
b: self.lower_lifetime(target),
|
||||
}))]
|
||||
})),
|
||||
)),
|
||||
}
|
||||
.into_iter()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub(crate) fn lower_type_bound(
|
||||
&'a self,
|
||||
@ -1380,8 +1378,8 @@ fn lower_impl_trait(&self, bounds: &[Interned<TypeBound>], krate: CrateId) -> Im
|
||||
crate::wrap_empty_binders(clause)
|
||||
});
|
||||
predicates.extend(sized_clause);
|
||||
predicates.shrink_to_fit();
|
||||
}
|
||||
predicates.shrink_to_fit();
|
||||
predicates
|
||||
});
|
||||
ImplTrait { bounds: crate::make_single_type_binders(predicates) }
|
||||
|
Loading…
Reference in New Issue
Block a user