pub trait TypeFoldable<I>: TypeVisitable<I>where
I: Interner,{
// Required method
fn try_fold_with<F>(
self,
folder: &mut F,
) -> Result<Self, <F as FallibleTypeFolder<I>>::Error>
where F: FallibleTypeFolder<I>;
// Provided method
fn fold_with<F>(self, folder: &mut F) -> Self
where F: TypeFolder<I> { ... }
}
Expand description
This trait is implemented for every type that can be folded, providing the skeleton of the traversal.
To implement this conveniently, use the derive macro located in
rustc_macros
.
This trait is a sub-trait of TypeVisitable
. This is because many
TypeFolder
instances use the methods in TypeVisitableExt
while folding,
which means in practice almost every foldable type needs to also be
visitable. (However, there are some types that are visitable without being
foldable.)
Required Methods§
sourcefn try_fold_with<F>(
self,
folder: &mut F,
) -> Result<Self, <F as FallibleTypeFolder<I>>::Error>where
F: FallibleTypeFolder<I>,
fn try_fold_with<F>(
self,
folder: &mut F,
) -> Result<Self, <F as FallibleTypeFolder<I>>::Error>where
F: FallibleTypeFolder<I>,
The entry point for folding. To fold a value t
with a folder f
call: t.try_fold_with(f)
.
For most types, this just traverses the value, calling try_fold_with
on each field/element.
For types of interest (such as Ty
), the implementation of this method
calls a folder method specifically for that type (such as
F::try_fold_ty
). This is where control transfers from TypeFoldable
to TypeFolder
.
Provided Methods§
sourcefn fold_with<F>(self, folder: &mut F) -> Selfwhere
F: TypeFolder<I>,
fn fold_with<F>(self, folder: &mut F) -> Selfwhere
F: TypeFolder<I>,
A convenient alternative to try_fold_with
for use with infallible
folders. Do not override this method, to ensure coherence with
try_fold_with
.
Object Safety§
Implementations on Foreign Types§
source§impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for &'tcx [InlineAsmTemplatePiece]
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for &'tcx [InlineAsmTemplatePiece]
fn try_fold_with<F: FallibleTypeFolder<TyCtxt<'tcx>>>( self, _folder: &mut F, ) -> Result<Self, F::Error>
source§impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for &'tcx [Span]
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for &'tcx [Span]
fn try_fold_with<F: FallibleTypeFolder<TyCtxt<'tcx>>>( self, _folder: &mut F, ) -> Result<Self, F::Error>
source§impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for ByRef
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for ByRef
fn try_fold_with<F: FallibleTypeFolder<TyCtxt<'tcx>>>( self, _: &mut F, ) -> Result<Self, F::Error>
fn fold_with<F: TypeFolder<TyCtxt<'tcx>>>(self, _: &mut F) -> Self
source§impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for InlineAsmTemplatePiece
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for InlineAsmTemplatePiece
fn try_fold_with<F: FallibleTypeFolder<TyCtxt<'tcx>>>( self, _: &mut F, ) -> Result<Self, F::Error>
fn fold_with<F: TypeFolder<TyCtxt<'tcx>>>(self, _: &mut F) -> Self
source§impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for Res
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for Res
fn try_fold_with<F: FallibleTypeFolder<TyCtxt<'tcx>>>( self, _: &mut F, ) -> Result<Self, F::Error>
fn fold_with<F: TypeFolder<TyCtxt<'tcx>>>(self, _: &mut F) -> Self
source§impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for CoroutineKind
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for CoroutineKind
fn try_fold_with<F: FallibleTypeFolder<TyCtxt<'tcx>>>( self, _: &mut F, ) -> Result<Self, F::Error>
fn fold_with<F: TypeFolder<TyCtxt<'tcx>>>(self, _: &mut F) -> Self
source§impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for MatchSource
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for MatchSource
fn try_fold_with<F: FallibleTypeFolder<TyCtxt<'tcx>>>( self, _: &mut F, ) -> Result<Self, F::Error>
fn fold_with<F: TypeFolder<TyCtxt<'tcx>>>(self, _: &mut F) -> Self
source§impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for Safety
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for Safety
fn try_fold_with<F: FallibleTypeFolder<TyCtxt<'tcx>>>( self, _: &mut F, ) -> Result<Self, F::Error>
fn fold_with<F: TypeFolder<TyCtxt<'tcx>>>(self, _: &mut F) -> Self
source§impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for InlineAsmRegOrRegClass
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for InlineAsmRegOrRegClass
fn try_fold_with<F: FallibleTypeFolder<TyCtxt<'tcx>>>( self, _: &mut F, ) -> Result<Self, F::Error>
fn fold_with<F: TypeFolder<TyCtxt<'tcx>>>(self, _: &mut F) -> Self
source§impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for Abi
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for Abi
fn try_fold_with<F: FallibleTypeFolder<TyCtxt<'tcx>>>( self, _: &mut F, ) -> Result<Self, F::Error>
fn fold_with<F: TypeFolder<TyCtxt<'tcx>>>(self, _: &mut F) -> Self
source§impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for Size
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for Size
fn try_fold_with<F: FallibleTypeFolder<TyCtxt<'tcx>>>( self, _: &mut F, ) -> Result<Self, F::Error>
fn fold_with<F: TypeFolder<TyCtxt<'tcx>>>(self, _: &mut F) -> Self
source§impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for InlineAsmOptions
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for InlineAsmOptions
fn try_fold_with<F: FallibleTypeFolder<TyCtxt<'tcx>>>( self, _: &mut F, ) -> Result<Self, F::Error>
fn fold_with<F: TypeFolder<TyCtxt<'tcx>>>(self, _: &mut F) -> Self
source§impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for NodeId
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for NodeId
fn try_fold_with<F: FallibleTypeFolder<TyCtxt<'tcx>>>( self, _: &mut F, ) -> Result<Self, F::Error>
fn fold_with<F: TypeFolder<TyCtxt<'tcx>>>(self, _: &mut F) -> Self
source§impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for HirId
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for HirId
fn try_fold_with<F: FallibleTypeFolder<TyCtxt<'tcx>>>( self, _: &mut F, ) -> Result<Self, F::Error>
fn fold_with<F: TypeFolder<TyCtxt<'tcx>>>(self, _: &mut F) -> Self
source§impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for DefId
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for DefId
fn try_fold_with<F: FallibleTypeFolder<TyCtxt<'tcx>>>( self, _: &mut F, ) -> Result<Self, F::Error>
fn fold_with<F: TypeFolder<TyCtxt<'tcx>>>(self, _: &mut F) -> Self
source§impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for LocalDefId
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for LocalDefId
fn try_fold_with<F: FallibleTypeFolder<TyCtxt<'tcx>>>( self, _: &mut F, ) -> Result<Self, F::Error>
fn fold_with<F: TypeFolder<TyCtxt<'tcx>>>(self, _: &mut F) -> Self
source§impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for Span
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for Span
fn try_fold_with<F: FallibleTypeFolder<TyCtxt<'tcx>>>( self, _: &mut F, ) -> Result<Self, F::Error>
fn fold_with<F: TypeFolder<TyCtxt<'tcx>>>(self, _: &mut F) -> Self
source§impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for ErrorGuaranteed
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for ErrorGuaranteed
fn try_fold_with<F: FallibleTypeFolder<TyCtxt<'tcx>>>( self, _folder: &mut F, ) -> Result<Self, F::Error>
source§impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for Ident
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for Ident
fn try_fold_with<F: FallibleTypeFolder<TyCtxt<'tcx>>>( self, _: &mut F, ) -> Result<Self, F::Error>
fn fold_with<F: TypeFolder<TyCtxt<'tcx>>>(self, _: &mut F) -> Self
source§impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for Symbol
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for Symbol
fn try_fold_with<F: FallibleTypeFolder<TyCtxt<'tcx>>>( self, _: &mut F, ) -> Result<Self, F::Error>
fn fold_with<F: TypeFolder<TyCtxt<'tcx>>>(self, _: &mut F) -> Self
source§impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for FieldIdx
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for FieldIdx
fn try_fold_with<F: FallibleTypeFolder<TyCtxt<'tcx>>>( self, _: &mut F, ) -> Result<Self, F::Error>
fn fold_with<F: TypeFolder<TyCtxt<'tcx>>>(self, _: &mut F) -> Self
source§impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for VariantIdx
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for VariantIdx
fn try_fold_with<F: FallibleTypeFolder<TyCtxt<'tcx>>>( self, _: &mut F, ) -> Result<Self, F::Error>
fn fold_with<F: TypeFolder<TyCtxt<'tcx>>>(self, _: &mut F) -> Self
source§impl<'tcx, T: TypeFoldable<TyCtxt<'tcx>> + Debug + Clone> TypeFoldable<TyCtxt<'tcx>> for Spanned<T>
impl<'tcx, T: TypeFoldable<TyCtxt<'tcx>> + Debug + Clone> TypeFoldable<TyCtxt<'tcx>> for Spanned<T>
fn try_fold_with<F: FallibleTypeFolder<TyCtxt<'tcx>>>( self, folder: &mut F, ) -> Result<Self, F::Error>
source§impl<I> TypeFoldable<I> for boolwhere
I: Interner,
impl<I> TypeFoldable<I> for boolwhere
I: Interner,
fn try_fold_with<F>(
self,
_: &mut F,
) -> Result<bool, <F as FallibleTypeFolder<I>>::Error>where
F: FallibleTypeFolder<I>,
fn fold_with<F>(self, _: &mut F) -> boolwhere
F: TypeFolder<I>,
source§impl<I> TypeFoldable<I> for u16where
I: Interner,
impl<I> TypeFoldable<I> for u16where
I: Interner,
fn try_fold_with<F>(
self,
_: &mut F,
) -> Result<u16, <F as FallibleTypeFolder<I>>::Error>where
F: FallibleTypeFolder<I>,
fn fold_with<F>(self, _: &mut F) -> u16where
F: TypeFolder<I>,
source§impl<I> TypeFoldable<I> for u32where
I: Interner,
impl<I> TypeFoldable<I> for u32where
I: Interner,
fn try_fold_with<F>(
self,
_: &mut F,
) -> Result<u32, <F as FallibleTypeFolder<I>>::Error>where
F: FallibleTypeFolder<I>,
fn fold_with<F>(self, _: &mut F) -> u32where
F: TypeFolder<I>,
source§impl<I> TypeFoldable<I> for u64where
I: Interner,
impl<I> TypeFoldable<I> for u64where
I: Interner,
fn try_fold_with<F>(
self,
_: &mut F,
) -> Result<u64, <F as FallibleTypeFolder<I>>::Error>where
F: FallibleTypeFolder<I>,
fn fold_with<F>(self, _: &mut F) -> u64where
F: TypeFolder<I>,
source§impl<I> TypeFoldable<I> for ()where
I: Interner,
impl<I> TypeFoldable<I> for ()where
I: Interner,
fn try_fold_with<F>(
self,
_: &mut F,
) -> Result<(), <F as FallibleTypeFolder<I>>::Error>where
F: FallibleTypeFolder<I>,
fn fold_with<F>(self, _: &mut F)where
F: TypeFolder<I>,
source§impl<I> TypeFoldable<I> for usizewhere
I: Interner,
impl<I> TypeFoldable<I> for usizewhere
I: Interner,
fn try_fold_with<F>(
self,
_: &mut F,
) -> Result<usize, <F as FallibleTypeFolder<I>>::Error>where
F: FallibleTypeFolder<I>,
fn fold_with<F>(self, _: &mut F) -> usizewhere
F: TypeFolder<I>,
source§impl<I> TypeFoldable<I> for Stringwhere
I: Interner,
impl<I> TypeFoldable<I> for Stringwhere
I: Interner,
fn try_fold_with<F>(
self,
_: &mut F,
) -> Result<String, <F as FallibleTypeFolder<I>>::Error>where
F: FallibleTypeFolder<I>,
fn fold_with<F>(self, _: &mut F) -> Stringwhere
F: TypeFolder<I>,
source§impl<I, A, B, C> TypeFoldable<I> for (A, B, C)
impl<I, A, B, C> TypeFoldable<I> for (A, B, C)
fn try_fold_with<F>(
self,
folder: &mut F,
) -> Result<(A, B, C), <F as FallibleTypeFolder<I>>::Error>where
F: FallibleTypeFolder<I>,
source§impl<I, T> TypeFoldable<I> for Option<T>where
I: Interner,
T: TypeFoldable<I>,
impl<I, T> TypeFoldable<I> for Option<T>where
I: Interner,
T: TypeFoldable<I>,
fn try_fold_with<F>(
self,
folder: &mut F,
) -> Result<Option<T>, <F as FallibleTypeFolder<I>>::Error>where
F: FallibleTypeFolder<I>,
source§impl<I, T> TypeFoldable<I> for Box<[T]>where
I: Interner,
T: TypeFoldable<I>,
impl<I, T> TypeFoldable<I> for Box<[T]>where
I: Interner,
T: TypeFoldable<I>,
fn try_fold_with<F>(
self,
folder: &mut F,
) -> Result<Box<[T]>, <F as FallibleTypeFolder<I>>::Error>where
F: FallibleTypeFolder<I>,
source§impl<I, T> TypeFoldable<I> for Box<T>where
I: Interner,
T: TypeFoldable<I>,
impl<I, T> TypeFoldable<I> for Box<T>where
I: Interner,
T: TypeFoldable<I>,
fn try_fold_with<F>(
self,
folder: &mut F,
) -> Result<Box<T>, <F as FallibleTypeFolder<I>>::Error>where
F: FallibleTypeFolder<I>,
source§impl<I, T> TypeFoldable<I> for Vec<T>where
I: Interner,
T: TypeFoldable<I>,
impl<I, T> TypeFoldable<I> for Vec<T>where
I: Interner,
T: TypeFoldable<I>,
fn try_fold_with<F>(
self,
folder: &mut F,
) -> Result<Vec<T>, <F as FallibleTypeFolder<I>>::Error>where
F: FallibleTypeFolder<I>,
source§impl<I, T, E> TypeFoldable<I> for Result<T, E>
impl<I, T, E> TypeFoldable<I> for Result<T, E>
fn try_fold_with<F>(
self,
folder: &mut F,
) -> Result<Result<T, E>, <F as FallibleTypeFolder<I>>::Error>where
F: FallibleTypeFolder<I>,
source§impl<I, T, Ix> TypeFoldable<I> for IndexVec<Ix, T>
impl<I, T, Ix> TypeFoldable<I> for IndexVec<Ix, T>
fn try_fold_with<F>(
self,
folder: &mut F,
) -> Result<IndexVec<Ix, T>, <F as FallibleTypeFolder<I>>::Error>where
F: FallibleTypeFolder<I>,
source§impl<I, T, U> TypeFoldable<I> for (T, U)
impl<I, T, U> TypeFoldable<I> for (T, U)
fn try_fold_with<F>(
self,
folder: &mut F,
) -> Result<(T, U), <F as FallibleTypeFolder<I>>::Error>where
F: FallibleTypeFolder<I>,
Implementors§
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for &'tcx List<LocalDefId>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for &'tcx List<Const<'tcx>>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for &'tcx List<Ty<'tcx>>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for &'tcx List<PlaceElem<'tcx>>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for &'tcx List<PolyExistentialPredicate<'tcx>>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for PlaceBase
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for ProjectionKind
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for rustc_middle::infer::canonical::Certainty
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for rustc_middle::mir::consts::Const<'tcx>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for ConstValue<'tcx>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for CovTerm
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for CoverageKind
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for MappingKind
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for Op
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for BindingForm<'tcx>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for LocalInfo<'tcx>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for MentionedItem<'tcx>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for VarDebugInfoContents<'tcx>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for ErrorHandled
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for Scalar
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for ConstraintCategory<'tcx>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for ReturnConstraint
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for AggregateKind<'tcx>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for BinOp
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for rustc_middle::mir::syntax::BorrowKind
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for CallSource
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for rustc_middle::mir::syntax::CastKind
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for FakeReadCause
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for InlineAsmMacro
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for InlineAsmOperand<'tcx>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for MirPhase
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for NonDivergingIntrinsic<'tcx>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for NullOp<'tcx>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for Operand<'tcx>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for RetagKind
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for Rvalue<'tcx>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for StatementKind<'tcx>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for TerminatorKind<'tcx>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for UnOp
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for UnwindAction
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for UnwindTerminateReason
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for IsConstable
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for ObligationCauseCode<'tcx>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for WellFormedLoc
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for OutlivesBound<'tcx>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for OverflowError
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for rustc_middle::ty::abstract_const::CastKind
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for NotConstEvaluatable
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for Adjust<'tcx>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for AutoBorrow<'tcx>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for AutoBorrowMutability
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for PointerCoercion
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for AdtKind
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for AssocKind
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for rustc_middle::ty::closure::BorrowKind
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for UpvarCapture
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for ExprKind
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for ValTree<'tcx>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for Asyncness
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for ClosureKind
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for ImplSubject<'tcx>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for InferConst
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for InstanceKind<'tcx>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for ReifyReason
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for PatternKind<'tcx>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for BoundRegionKind
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for Reveal
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for UpvarArgs<'tcx>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for UserType<'tcx>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for rustc_middle::hir::place::Place<'tcx>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for Projection<'tcx>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for QueryRegionConstraints<'tcx>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for MemberConstraint<'tcx>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for Scope
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for BasicBlocks<'tcx>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for Cache
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for rustc_middle::mir::consts::UnevaluatedConst<'tcx>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for BlockMarkerId
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for BranchSpan
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for ConditionId
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for ConditionInfo
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for CounterId
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for CoverageInfoHi
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for DecisionInfo
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for Expression
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for ExpressionId
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for FunctionCoverageInfo
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for MCDCBranchSpan
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for MCDCDecisionSpan
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for Mapping
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for SourceRegion
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for CtfeProvenance
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for AllocId
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for GlobalId<'tcx>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for CoroutineLayout<'tcx>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for CoroutineSavedLocal
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for CoroutineSavedTy<'tcx>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for Statement<'tcx>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for BasicBlock
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for BasicBlockData<'tcx>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for BlockTailInfo
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for Body<'tcx>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for CoroutineInfo<'tcx>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for Local
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for LocalDecl<'tcx>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for MirSource<'tcx>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for Promoted
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for SourceInfo
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for SourceScope
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for SourceScopeData<'tcx>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for SourceScopeLocalData
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for UserTypeProjection
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for UserTypeProjections
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for VarDebugInfo<'tcx>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for VarDebugInfoFragment<'tcx>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for ConstOperand<'tcx>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for CopyNonOverlapping<'tcx>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for rustc_middle::mir::syntax::Place<'tcx>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for SwitchTargets
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for PlaceTy<'tcx>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for Terminator<'tcx>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for DropckOutlivesResult<'tcx>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for NormalizationResult<'tcx>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for AscribeUserType<'tcx>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for Eq<'tcx>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for ProvePredicate<'tcx>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for Subtype<'tcx>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for ExternalConstraints<'tcx>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for PredefinedOpaques<'tcx>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for DerivedCause<'tcx>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for IfExpressionCause<'tcx>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for ImplDerivedCause<'tcx>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for InternedObligationCauseCode<'tcx>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for MatchExpressionArmCause<'tcx>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for ObligationCause<'tcx>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for UnifyReceiverContext<'tcx>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for Adjustment<'tcx>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for OverloadedDeref<'tcx>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for AssocItem
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for CaptureInfo
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for CapturedPlace<'tcx>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for UpvarId
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for UpvarPath
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for Expr<'tcx>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for rustc_middle::ty::consts::Const<'tcx>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for GenericArg<'tcx>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for UserArgs<'tcx>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for UserSelfTy<'tcx>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for Instance<'tcx>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for Pattern<'tcx>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for Clause<'tcx>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for Predicate<'tcx>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for TraitPredPrintModifiersAndPath<'tcx>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for TraitPredPrintWithBoundConstness<'tcx>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for TraitRefPrintOnlyTraitName<'tcx>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for TraitRefPrintOnlyTraitPath<'tcx>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for TraitRefPrintSugared<'tcx>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for BoundRegion
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for LateParamRegion
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for Region<'tcx>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for BoundVar
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for ClosureSizeProfileData<'tcx>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for ImplHeader<'tcx>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for InstantiatedPredicates<'tcx>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for OpaqueHiddenType<'tcx>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for ParamEnv<'tcx>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for Placeholder<BoundRegion>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for Placeholder<BoundVar>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for Placeholder<BoundTy>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for Term<'tcx>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for Ty<'tcx>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for ParamConst
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for ParamTy
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for CanonicalUserTypeAnnotation<'tcx>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for UserTypeAnnotationIndex
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for CanonicalVarInfos<'tcx>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for GenericArgsRef<'tcx>
impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for Clauses<'tcx>
impl<'tcx, N> TypeFoldable<TyCtxt<'tcx>> for ImplSource<'tcx, N>where
N: TypeFoldable<TyCtxt<'tcx>>,
impl<'tcx, N> TypeFoldable<TyCtxt<'tcx>> for ImplSourceUserDefinedData<'tcx, N>where
N: TypeFoldable<TyCtxt<'tcx>>,
impl<'tcx, O> TypeFoldable<TyCtxt<'tcx>> for AssertKind<O>where
O: TypeFoldable<TyCtxt<'tcx>>,
impl<'tcx, R> TypeFoldable<TyCtxt<'tcx>> for QueryResponse<'tcx, R>where
R: TypeFoldable<TyCtxt<'tcx>>,
impl<'tcx, T> TypeFoldable<TyCtxt<'tcx>> for ClearCrossCrate<T>where
T: TypeFoldable<TyCtxt<'tcx>>,
impl<'tcx, T> TypeFoldable<TyCtxt<'tcx>> for Normalize<T>where
T: TypeFoldable<TyCtxt<'tcx>>,
impl<'tcx, T> TypeFoldable<TyCtxt<'tcx>> for ParamEnvAnd<'tcx, T>where
T: TypeFoldable<TyCtxt<'tcx>>,
impl<'tcx, V, T> TypeFoldable<TyCtxt<'tcx>> for ProjectionElem<V, T>
impl<I> TypeFoldable<I> for ExistentialPredicate<I>where
I: Interner,
ExistentialTraitRef<I>: TypeFoldable<I>,
ExistentialProjection<I>: TypeFoldable<I>,
<I as Interner>::DefId: TypeFoldable<I>,
impl<I> TypeFoldable<I> for ClauseKind<I>where
I: Interner,
TraitPredicate<I>: TypeFoldable<I>,
OutlivesPredicate<I, <I as Interner>::Region>: TypeFoldable<I>,
OutlivesPredicate<I, <I as Interner>::Ty>: TypeFoldable<I>,
ProjectionPredicate<I>: TypeFoldable<I>,
<I as Interner>::Const: TypeFoldable<I>,
<I as Interner>::Ty: TypeFoldable<I>,
<I as Interner>::GenericArg: TypeFoldable<I>,
impl<I> TypeFoldable<I> for PredicateKind<I>where
I: Interner,
ClauseKind<I>: TypeFoldable<I>,
<I as Interner>::DefId: TypeFoldable<I>,
SubtypePredicate<I>: TypeFoldable<I>,
CoercePredicate<I>: TypeFoldable<I>,
<I as Interner>::Const: TypeFoldable<I>,
NormalizesTo<I>: TypeFoldable<I>,
<I as Interner>::Term: TypeFoldable<I>,
impl<I> TypeFoldable<I> for AliasRelationDirectionwhere
I: Interner,
impl<I> TypeFoldable<I> for AliasTyKindwhere
I: Interner,
impl<I> TypeFoldable<I> for BoundConstnesswhere
I: Interner,
impl<I> TypeFoldable<I> for CanonicalTyVarKindwhere
I: Interner,
impl<I> TypeFoldable<I> for CanonicalVarKind<I>where
I: Interner,
<I as Interner>::PlaceholderTy: TypeFoldable<I>,
<I as Interner>::PlaceholderRegion: TypeFoldable<I>,
<I as Interner>::PlaceholderConst: TypeFoldable<I>,
impl<I> TypeFoldable<I> for FloatTywhere
I: Interner,
impl<I> TypeFoldable<I> for InferTywhere
I: Interner,
impl<I> TypeFoldable<I> for IntVarValuewhere
I: Interner,
impl<I> TypeFoldable<I> for Movabilitywhere
I: Interner,
impl<I> TypeFoldable<I> for Mutabilitywhere
I: Interner,
impl<I> TypeFoldable<I> for PredicatePolaritywhere
I: Interner,
impl<I> TypeFoldable<I> for Variancewhere
I: Interner,
impl<I> TypeFoldable<I> for BuiltinImplSourcewhere
I: Interner,
impl<I> TypeFoldable<I> for rustc_middle::ty::solve::Certaintywhere
I: Interner,
impl<I> TypeFoldable<I> for GoalSourcewhere
I: Interner,
impl<I> TypeFoldable<I> for MaybeCausewhere
I: Interner,
impl<I> TypeFoldable<I> for ProbeKind<I>where
I: Interner,
Result<Canonical<I, Response<I>>, NoSolution>: TypeFoldable<I>,
CandidateSource<I>: TypeFoldable<I>,
impl<I> TypeFoldable<I> for rustc_type_ir::const_kind::UnevaluatedConst<I>where
I: Interner,
<I as Interner>::DefId: TypeFoldable<I>,
<I as Interner>::GenericArgs: TypeFoldable<I>,
impl<I> TypeFoldable<I> for OpaqueTypeKey<I>where
I: Interner,
<I as Interner>::LocalDefId: TypeFoldable<I>,
<I as Interner>::GenericArgs: TypeFoldable<I>,
impl<I> TypeFoldable<I> for AliasTerm<I>where
I: Interner,
<I as Interner>::GenericArgs: TypeFoldable<I>,
<I as Interner>::DefId: TypeFoldable<I>,
impl<I> TypeFoldable<I> for CoercePredicate<I>
impl<I> TypeFoldable<I> for ExistentialProjection<I>where
I: Interner,
<I as Interner>::DefId: TypeFoldable<I>,
<I as Interner>::GenericArgs: TypeFoldable<I>,
<I as Interner>::Term: TypeFoldable<I>,
impl<I> TypeFoldable<I> for ExistentialTraitRef<I>where
I: Interner,
<I as Interner>::DefId: TypeFoldable<I>,
<I as Interner>::GenericArgs: TypeFoldable<I>,
impl<I> TypeFoldable<I> for NormalizesTo<I>
impl<I> TypeFoldable<I> for ProjectionPredicate<I>
impl<I> TypeFoldable<I> for SubtypePredicate<I>
impl<I> TypeFoldable<I> for TraitPredicate<I>
impl<I> TypeFoldable<I> for TraitRef<I>where
I: Interner,
<I as Interner>::DefId: TypeFoldable<I>,
<I as Interner>::GenericArgs: TypeFoldable<I>,
impl<I> TypeFoldable<I> for AliasTy<I>where
I: Interner,
<I as Interner>::GenericArgs: TypeFoldable<I>,
<I as Interner>::DefId: TypeFoldable<I>,
impl<I> TypeFoldable<I> for FnSig<I>where
I: Interner,
<I as Interner>::Tys: TypeFoldable<I>,
<I as Interner>::Safety: TypeFoldable<I>,
<I as Interner>::Abi: TypeFoldable<I>,
impl<I> TypeFoldable<I> for TypeAndMut<I>
impl<I> TypeFoldable<I> for ExternalConstraintsData<I>where
I: Interner,
Vec<OutlivesPredicate<I, <I as Interner>::GenericArg>>: TypeFoldable<I>,
Vec<(OpaqueTypeKey<I>, <I as Interner>::Ty)>: TypeFoldable<I>,
NestedNormalizationGoals<I>: TypeFoldable<I>,
impl<I> TypeFoldable<I> for NestedNormalizationGoals<I>
impl<I> TypeFoldable<I> for NoSolutionwhere
I: Interner,
impl<I> TypeFoldable<I> for PredefinedOpaquesData<I>
impl<I> TypeFoldable<I> for Response<I>where
I: Interner,
CanonicalVarValues<I>: TypeFoldable<I>,
<I as Interner>::ExternalConstraints: TypeFoldable<I>,
impl<I> TypeFoldable<I> for CanonicalVarInfo<I>
impl<I> TypeFoldable<I> for CanonicalVarValues<I>
impl<I> TypeFoldable<I> for ClosureArgs<I>
impl<I> TypeFoldable<I> for CoroutineArgs<I>
impl<I> TypeFoldable<I> for CoroutineClosureArgs<I>
impl<I> TypeFoldable<I> for CoroutineClosureSignature<I>where
I: Interner,
<I as Interner>::Ty: TypeFoldable<I>,
<I as Interner>::Safety: TypeFoldable<I>,
<I as Interner>::Abi: TypeFoldable<I>,
impl<I> TypeFoldable<I> for DebruijnIndexwhere
I: Interner,
impl<I> TypeFoldable<I> for FnHeader<I>
impl<I> TypeFoldable<I> for FnSigTys<I>
impl<I> TypeFoldable<I> for GenSig<I>
impl<I> TypeFoldable<I> for RegionVidwhere
I: Interner,
impl<I> TypeFoldable<I> for UniverseIndexwhere
I: Interner,
impl<I, A> TypeFoldable<I> for OutlivesPredicate<I, A>
impl<I, P> TypeFoldable<I> for Goal<I, P>
impl<I, P> TypeFoldable<I> for QueryInput<I, P>where
I: Interner,
Goal<I, P>: TypeFoldable<I>,
<I as Interner>::PredefinedOpaques: TypeFoldable<I>,
impl<I, T> !TypeFoldable<I> for EarlyBinder<I, T>where
I: Interner,
For early binders, you should first call instantiate
before using any visitors.