From 9e5192d917e998d78fd25c4013eb8117f7401068 Mon Sep 17 00:00:00 2001 From: Lukas Wirth Date: Sat, 20 Feb 2021 18:51:42 +0100 Subject: Don't lower TypeBound::Lifetime as GenericPredicate::Error --- crates/hir_ty/src/lower.rs | 34 ++++++++++++++++------------------ 1 file changed, 16 insertions(+), 18 deletions(-) (limited to 'crates/hir_ty/src/lower.rs') diff --git a/crates/hir_ty/src/lower.rs b/crates/hir_ty/src/lower.rs index f9dc832bd..99b0ecf3b 100644 --- a/crates/hir_ty/src/lower.rs +++ b/crates/hir_ty/src/lower.rs @@ -655,17 +655,6 @@ impl TraitRef { ) -> Substs { substs_from_path_segment(ctx, segment, Some(resolved.into()), false) } - - pub(crate) fn from_type_bound( - ctx: &TyLoweringContext<'_>, - bound: &TypeBound, - self_ty: Ty, - ) -> Option { - match bound { - TypeBound::Path(path) => TraitRef::from_path(ctx, path, Some(self_ty)), - TypeBound::Lifetime(_) | TypeBound::Error => None, - } - } } impl GenericPredicate { @@ -705,13 +694,22 @@ impl GenericPredicate { bound: &'a TypeBound, self_ty: Ty, ) -> impl Iterator + 'a { - let trait_ref = TraitRef::from_type_bound(ctx, bound, self_ty); - iter::once(trait_ref.clone().map_or(GenericPredicate::Error, GenericPredicate::Implemented)) - .chain( - trait_ref - .into_iter() - .flat_map(move |tr| assoc_type_bindings_from_type_bound(ctx, bound, tr)), - ) + let mut bindings = None; + let trait_ref = match bound { + TypeBound::Path(path) => { + bindings = TraitRef::from_path(ctx, path, Some(self_ty)); + Some( + bindings.clone().map_or(GenericPredicate::Error, GenericPredicate::Implemented), + ) + } + TypeBound::Lifetime(_) => None, + TypeBound::Error => Some(GenericPredicate::Error), + }; + trait_ref.into_iter().chain( + bindings + .into_iter() + .flat_map(move |tr| assoc_type_bindings_from_type_bound(ctx, bound, tr)), + ) } } -- cgit v1.2.3