struct ReplaceProjectionWith<'a, 'b, I: Interner, D: SolverDelegate<Interner = I>> {
ecx: &'a mut EvalCtxt<'b, D>,
param_env: I::ParamEnv,
self_ty: I::Ty,
mapping: &'a HashMap<I::DefId, Vec<Binder<I, ProjectionPredicate<I>>>>,
nested: Vec<Goal<I, I::Predicate>>,
}
Fields§
§ecx: &'a mut EvalCtxt<'b, D>
§param_env: I::ParamEnv
§self_ty: I::Ty
§mapping: &'a HashMap<I::DefId, Vec<Binder<I, ProjectionPredicate<I>>>>
§nested: Vec<Goal<I, I::Predicate>>
Implementations§
Source§impl<D, I> ReplaceProjectionWith<'_, '_, I, D>where
D: SolverDelegate<Interner = I>,
I: Interner,
impl<D, I> ReplaceProjectionWith<'_, '_, I, D>where
D: SolverDelegate<Interner = I>,
I: Interner,
fn projection_may_match( &mut self, source_projection: Binder<I, ProjectionPredicate<I>>, target_projection: AliasTerm<I>, ) -> bool
Sourcefn try_eagerly_replace_alias(
&mut self,
alias_term: AliasTerm<I>,
) -> Result<Option<I::Term>, Ambiguous>
fn try_eagerly_replace_alias( &mut self, alias_term: AliasTerm<I>, ) -> Result<Option<I::Term>, Ambiguous>
Try to replace an alias with the term present in the projection bounds of the self type.
Returns Ok<None>
if this alias is not eligible to be replaced, or bail with
Err(Ambiguous)
if it’s uncertain which projection bound to replace the term with due
to multiple bounds applying.
Trait Implementations§
Source§impl<D, I> FallibleTypeFolder<I> for ReplaceProjectionWith<'_, '_, I, D>where
D: SolverDelegate<Interner = I>,
I: Interner,
impl<D, I> FallibleTypeFolder<I> for ReplaceProjectionWith<'_, '_, I, D>where
D: SolverDelegate<Interner = I>,
I: Interner,
type Error = Ambiguous
fn cx(&self) -> I
fn try_fold_ty(&mut self, ty: I::Ty) -> Result<I::Ty, Ambiguous>
fn try_fold_binder<T>(
&mut self,
t: Binder<I, T>,
) -> Result<Binder<I, T>, Self::Error>where
T: TypeFoldable<I>,
fn try_fold_region( &mut self, r: <I as Interner>::Region, ) -> Result<<I as Interner>::Region, Self::Error>
fn try_fold_const( &mut self, c: <I as Interner>::Const, ) -> Result<<I as Interner>::Const, Self::Error>
fn try_fold_predicate( &mut self, p: <I as Interner>::Predicate, ) -> Result<<I as Interner>::Predicate, Self::Error>
fn try_fold_clauses( &mut self, c: <I as Interner>::Clauses, ) -> Result<<I as Interner>::Clauses, Self::Error>
Auto Trait Implementations§
impl<'a, 'b, I, D> DynSend for ReplaceProjectionWith<'a, 'b, I, D>where
<I as Interner>::ParamEnv: DynSend,
<I as Interner>::Ty: DynSend,
<I as Interner>::CanonicalVarKinds: DynSend,
<<D as SolverDelegate>::Infcx as InferCtxtLike>::OpaqueTypeStorageEntries: DynSend,
<I as Interner>::Span: DynSend,
<I as Interner>::DefId: DynSync + DynSend,
<I as Interner>::Predicate: DynSend,
D: DynSync + DynSend,
<I as Interner>::GenericArgs: DynSend + DynSync,
<I as Interner>::BoundVarKinds: DynSync,
<I as Interner>::Term: DynSync,
<I as Interner>::LocalDefIds: DynSend,
<I as Interner>::GenericArg: DynSend,
<I as Interner>::PredefinedOpaques: DynSend,
<I as Interner>::ExternalConstraints: DynSend,
impl<'a, 'b, I, D> DynSync for ReplaceProjectionWith<'a, 'b, I, D>where
<I as Interner>::ParamEnv: DynSync,
<I as Interner>::Ty: DynSync,
<I as Interner>::CanonicalVarKinds: DynSync,
<<D as SolverDelegate>::Infcx as InferCtxtLike>::OpaqueTypeStorageEntries: DynSync,
<I as Interner>::Span: DynSync,
<I as Interner>::DefId: DynSync,
<I as Interner>::Predicate: DynSync,
D: DynSync,
<I as Interner>::GenericArgs: DynSync,
<I as Interner>::BoundVarKinds: DynSync,
<I as Interner>::Term: DynSync,
<I as Interner>::LocalDefIds: DynSync,
<I as Interner>::GenericArg: DynSync,
<I as Interner>::PredefinedOpaques: DynSync,
<I as Interner>::ExternalConstraints: DynSync,
impl<'a, 'b, I, D> Freeze for ReplaceProjectionWith<'a, 'b, I, D>
impl<'a, 'b, I, D> RefUnwindSafe for ReplaceProjectionWith<'a, 'b, I, D>where
<I as Interner>::ParamEnv: RefUnwindSafe,
<I as Interner>::Ty: RefUnwindSafe,
<I as Interner>::CanonicalVarKinds: RefUnwindSafe,
<<D as SolverDelegate>::Infcx as InferCtxtLike>::OpaqueTypeStorageEntries: RefUnwindSafe,
<I as Interner>::Span: RefUnwindSafe,
D: RefUnwindSafe,
<I as Interner>::GenericArgs: RefUnwindSafe,
<I as Interner>::Predicate: RefUnwindSafe,
<I as Interner>::DefId: RefUnwindSafe,
<I as Interner>::BoundVarKinds: RefUnwindSafe,
<I as Interner>::LocalDefIds: RefUnwindSafe,
<I as Interner>::GenericArg: RefUnwindSafe,
<I as Interner>::Term: RefUnwindSafe,
<I as Interner>::PredefinedOpaques: RefUnwindSafe,
<I as Interner>::ExternalConstraints: RefUnwindSafe,
impl<'a, 'b, I, D> Send for ReplaceProjectionWith<'a, 'b, I, D>where
<I as Interner>::ParamEnv: Send,
<I as Interner>::Ty: Send,
<I as Interner>::CanonicalVarKinds: Send,
<<D as SolverDelegate>::Infcx as InferCtxtLike>::OpaqueTypeStorageEntries: Send,
<I as Interner>::Span: Send,
D: Sync + Send,
<I as Interner>::GenericArgs: Send + Sync,
<I as Interner>::Predicate: Send,
<I as Interner>::DefId: Sync + Send,
<I as Interner>::LocalDefIds: Send,
<I as Interner>::BoundVarKinds: Sync,
<I as Interner>::PredefinedOpaques: Send,
<I as Interner>::Term: Sync,
<I as Interner>::ExternalConstraints: Send,
<I as Interner>::GenericArg: Send,
impl<'a, 'b, I, D> Sync for ReplaceProjectionWith<'a, 'b, I, D>where
<I as Interner>::ParamEnv: Sync,
<I as Interner>::Ty: Sync,
<I as Interner>::CanonicalVarKinds: Sync,
<<D as SolverDelegate>::Infcx as InferCtxtLike>::OpaqueTypeStorageEntries: Sync,
<I as Interner>::Span: Sync,
D: Sync,
<I as Interner>::GenericArgs: Sync,
<I as Interner>::Predicate: Sync,
<I as Interner>::DefId: Sync,
<I as Interner>::BoundVarKinds: Sync,
<I as Interner>::LocalDefIds: Sync,
<I as Interner>::Term: Sync,
<I as Interner>::PredefinedOpaques: Sync,
<I as Interner>::GenericArg: Sync,
<I as Interner>::ExternalConstraints: Sync,
impl<'a, 'b, I, D> Unpin for ReplaceProjectionWith<'a, 'b, I, D>
impl<'a, 'b, I, D> !UnwindSafe for ReplaceProjectionWith<'a, 'b, I, D>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T, R> CollectAndApply<T, R> for T
impl<T, R> CollectAndApply<T, R> for T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<I, T, U> Upcast<I, U> for Twhere
U: UpcastFrom<I, T>,
impl<I, T, U> Upcast<I, U> for Twhere
U: UpcastFrom<I, T>,
Source§impl<I, T> UpcastFrom<I, T> for T
impl<I, T> UpcastFrom<I, T> for T
fn upcast_from(from: T, _tcx: I) -> T
Source§impl<T> WithSubscriber for T
impl<T> WithSubscriber for T
Source§fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
Source§fn with_current_subscriber(self) -> WithDispatch<Self>
fn with_current_subscriber(self) -> WithDispatch<Self>
Layout§
Note: Unable to compute type layout, possibly due to this type having generic parameters. Layout can only be computed for concrete, fully-instantiated types.