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