Trait rustc_middle::ty::fold::TypeFoldable
source · pub trait TypeFoldable<'tcx>: TypeVisitable<'tcx> {
fn try_fold_with<F: FallibleTypeFolder<'tcx>>(
self,
folder: &mut F
) -> Result<Self, F::Error>;
fn fold_with<F: TypeFolder<'tcx>>(self, folder: &mut F) -> Self { ... }
}
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
.
Required Methods§
sourcefn try_fold_with<F: FallibleTypeFolder<'tcx>>(
self,
folder: &mut F
) -> Result<Self, F::Error>
fn try_fold_with<F: FallibleTypeFolder<'tcx>>(
self,
folder: &mut F
) -> Result<Self, F::Error>
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 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: TypeFolder<'tcx>>(self, folder: &mut F) -> Self
fn fold_with<F: TypeFolder<'tcx>>(self, folder: &mut F) -> Self
A convenient alternative to try_fold_with
for use with infallible
folders. Do not override this method, to ensure coherence with
try_fold_with
.
Implementations on Foreign Types§
source§impl<'tcx> TypeFoldable<'tcx> for Movability
impl<'tcx> TypeFoldable<'tcx> for Movability
fn try_fold_with<F: FallibleTypeFolder<'tcx>>(
self,
_: &mut F
) -> Result<Self, F::Error>
fn fold_with<F: TypeFolder<'tcx>>(self, _: &mut F) -> Self
source§impl<'tcx> TypeFoldable<'tcx> for GeneratorKind
impl<'tcx> TypeFoldable<'tcx> for GeneratorKind
fn try_fold_with<F: FallibleTypeFolder<'tcx>>(
self,
_: &mut F
) -> Result<Self, F::Error>
fn fold_with<F: TypeFolder<'tcx>>(self, _: &mut F) -> Self
source§impl<'tcx> TypeFoldable<'tcx> for &'tcx [InlineAsmTemplatePiece]
impl<'tcx> TypeFoldable<'tcx> for &'tcx [InlineAsmTemplatePiece]
fn try_fold_with<F: FallibleTypeFolder<'tcx>>(
self,
_folder: &mut F
) -> Result<Self, F::Error>
source§impl<'tcx> TypeFoldable<'tcx> for &'tcx [Span]
impl<'tcx> TypeFoldable<'tcx> for &'tcx [Span]
fn try_fold_with<F: FallibleTypeFolder<'tcx>>(
self,
_folder: &mut F
) -> Result<Self, F::Error>
source§impl<'tcx, R: Idx, C: Idx> TypeFoldable<'tcx> for BitMatrix<R, C>
impl<'tcx, R: Idx, C: Idx> TypeFoldable<'tcx> for BitMatrix<R, C>
fn try_fold_with<F: FallibleTypeFolder<'tcx>>(
self,
_: &mut F
) -> Result<Self, F::Error>
source§impl<'tcx> TypeFoldable<'tcx> for ()
impl<'tcx> TypeFoldable<'tcx> for ()
fn try_fold_with<F: FallibleTypeFolder<'tcx>>(
self,
_: &mut F
) -> Result<Self, F::Error>
fn fold_with<F: TypeFolder<'tcx>>(self, _: &mut F) -> Self
source§impl<'tcx> TypeFoldable<'tcx> for bool
impl<'tcx> TypeFoldable<'tcx> for bool
fn try_fold_with<F: FallibleTypeFolder<'tcx>>(
self,
_: &mut F
) -> Result<Self, F::Error>
fn fold_with<F: TypeFolder<'tcx>>(self, _: &mut F) -> Self
source§impl<'tcx> TypeFoldable<'tcx> for usize
impl<'tcx> TypeFoldable<'tcx> for usize
fn try_fold_with<F: FallibleTypeFolder<'tcx>>(
self,
_: &mut F
) -> Result<Self, F::Error>
fn fold_with<F: TypeFolder<'tcx>>(self, _: &mut F) -> Self
source§impl<'tcx> TypeFoldable<'tcx> for VariantIdx
impl<'tcx> TypeFoldable<'tcx> for VariantIdx
fn try_fold_with<F: FallibleTypeFolder<'tcx>>(
self,
_: &mut F
) -> Result<Self, F::Error>
fn fold_with<F: TypeFolder<'tcx>>(self, _: &mut F) -> Self
source§impl<'tcx> TypeFoldable<'tcx> for u32
impl<'tcx> TypeFoldable<'tcx> for u32
fn try_fold_with<F: FallibleTypeFolder<'tcx>>(
self,
_: &mut F
) -> Result<Self, F::Error>
fn fold_with<F: TypeFolder<'tcx>>(self, _: &mut F) -> Self
source§impl<'tcx> TypeFoldable<'tcx> for u64
impl<'tcx> TypeFoldable<'tcx> for u64
fn try_fold_with<F: FallibleTypeFolder<'tcx>>(
self,
_: &mut F
) -> Result<Self, F::Error>
fn fold_with<F: TypeFolder<'tcx>>(self, _: &mut F) -> Self
source§impl<'tcx> TypeFoldable<'tcx> for String
impl<'tcx> TypeFoldable<'tcx> for String
fn try_fold_with<F: FallibleTypeFolder<'tcx>>(
self,
_: &mut F
) -> Result<Self, F::Error>
fn fold_with<F: TypeFolder<'tcx>>(self, _: &mut F) -> Self
source§impl<'tcx> TypeFoldable<'tcx> for InlineAsmOptions
impl<'tcx> TypeFoldable<'tcx> for InlineAsmOptions
fn try_fold_with<F: FallibleTypeFolder<'tcx>>(
self,
_: &mut F
) -> Result<Self, F::Error>
fn fold_with<F: TypeFolder<'tcx>>(self, _: &mut F) -> Self
source§impl<'tcx> TypeFoldable<'tcx> for InlineAsmTemplatePiece
impl<'tcx> TypeFoldable<'tcx> for InlineAsmTemplatePiece
fn try_fold_with<F: FallibleTypeFolder<'tcx>>(
self,
_: &mut F
) -> Result<Self, F::Error>
fn fold_with<F: TypeFolder<'tcx>>(self, _: &mut F) -> Self
source§impl<'tcx> TypeFoldable<'tcx> for NodeId
impl<'tcx> TypeFoldable<'tcx> for NodeId
fn try_fold_with<F: FallibleTypeFolder<'tcx>>(
self,
_: &mut F
) -> Result<Self, F::Error>
fn fold_with<F: TypeFolder<'tcx>>(self, _: &mut F) -> Self
source§impl<'tcx> TypeFoldable<'tcx> for Symbol
impl<'tcx> TypeFoldable<'tcx> for Symbol
fn try_fold_with<F: FallibleTypeFolder<'tcx>>(
self,
_: &mut F
) -> Result<Self, F::Error>
fn fold_with<F: TypeFolder<'tcx>>(self, _: &mut F) -> Self
source§impl<'tcx> TypeFoldable<'tcx> for Res
impl<'tcx> TypeFoldable<'tcx> for Res
fn try_fold_with<F: FallibleTypeFolder<'tcx>>(
self,
_: &mut F
) -> Result<Self, F::Error>
fn fold_with<F: TypeFolder<'tcx>>(self, _: &mut F) -> Self
source§impl<'tcx> TypeFoldable<'tcx> for DefId
impl<'tcx> TypeFoldable<'tcx> for DefId
fn try_fold_with<F: FallibleTypeFolder<'tcx>>(
self,
_: &mut F
) -> Result<Self, F::Error>
fn fold_with<F: TypeFolder<'tcx>>(self, _: &mut F) -> Self
source§impl<'tcx> TypeFoldable<'tcx> for LocalDefId
impl<'tcx> TypeFoldable<'tcx> for LocalDefId
fn try_fold_with<F: FallibleTypeFolder<'tcx>>(
self,
_: &mut F
) -> Result<Self, F::Error>
fn fold_with<F: TypeFolder<'tcx>>(self, _: &mut F) -> Self
source§impl<'tcx> TypeFoldable<'tcx> for HirId
impl<'tcx> TypeFoldable<'tcx> for HirId
fn try_fold_with<F: FallibleTypeFolder<'tcx>>(
self,
_: &mut F
) -> Result<Self, F::Error>
fn fold_with<F: TypeFolder<'tcx>>(self, _: &mut F) -> Self
source§impl<'tcx> TypeFoldable<'tcx> for MatchSource
impl<'tcx> TypeFoldable<'tcx> for MatchSource
fn try_fold_with<F: FallibleTypeFolder<'tcx>>(
self,
_: &mut F
) -> Result<Self, F::Error>
fn fold_with<F: TypeFolder<'tcx>>(self, _: &mut F) -> Self
source§impl<'tcx> TypeFoldable<'tcx> for Unsafety
impl<'tcx> TypeFoldable<'tcx> for Unsafety
fn try_fold_with<F: FallibleTypeFolder<'tcx>>(
self,
_: &mut F
) -> Result<Self, F::Error>
fn fold_with<F: TypeFolder<'tcx>>(self, _: &mut F) -> Self
source§impl<'tcx> TypeFoldable<'tcx> for InlineAsmRegOrRegClass
impl<'tcx> TypeFoldable<'tcx> for InlineAsmRegOrRegClass
fn try_fold_with<F: FallibleTypeFolder<'tcx>>(
self,
_: &mut F
) -> Result<Self, F::Error>
fn fold_with<F: TypeFolder<'tcx>>(self, _: &mut F) -> Self
source§impl<'tcx> TypeFoldable<'tcx> for Abi
impl<'tcx> TypeFoldable<'tcx> for Abi
fn try_fold_with<F: FallibleTypeFolder<'tcx>>(
self,
_: &mut F
) -> Result<Self, F::Error>
fn fold_with<F: TypeFolder<'tcx>>(self, _: &mut F) -> Self
source§impl<'tcx> TypeFoldable<'tcx> for Span
impl<'tcx> TypeFoldable<'tcx> for Span
fn try_fold_with<F: FallibleTypeFolder<'tcx>>(
self,
_: &mut F
) -> Result<Self, F::Error>
fn fold_with<F: TypeFolder<'tcx>>(self, _: &mut F) -> Self
source§impl<'tcx> TypeFoldable<'tcx> for ErrorGuaranteed
impl<'tcx> TypeFoldable<'tcx> for ErrorGuaranteed
fn try_fold_with<F: FallibleTypeFolder<'tcx>>(
self,
_: &mut F
) -> Result<Self, F::Error>
fn fold_with<F: TypeFolder<'tcx>>(self, _: &mut F) -> Self
source§impl<'tcx> TypeFoldable<'tcx> for Size
impl<'tcx> TypeFoldable<'tcx> for Size
fn try_fold_with<F: FallibleTypeFolder<'tcx>>(
self,
_: &mut F
) -> Result<Self, F::Error>
fn fold_with<F: TypeFolder<'tcx>>(self, _: &mut F) -> Self
source§impl<'tcx, T: TypeFoldable<'tcx>, U: TypeFoldable<'tcx>> TypeFoldable<'tcx> for (T, U)
impl<'tcx, T: TypeFoldable<'tcx>, U: TypeFoldable<'tcx>> TypeFoldable<'tcx> for (T, U)
fn try_fold_with<F: FallibleTypeFolder<'tcx>>(
self,
folder: &mut F
) -> Result<(T, U), F::Error>
source§impl<'tcx, A: TypeFoldable<'tcx>, B: TypeFoldable<'tcx>, C: TypeFoldable<'tcx>> TypeFoldable<'tcx> for (A, B, C)
impl<'tcx, A: TypeFoldable<'tcx>, B: TypeFoldable<'tcx>, C: TypeFoldable<'tcx>> TypeFoldable<'tcx> for (A, B, C)
fn try_fold_with<F: FallibleTypeFolder<'tcx>>(
self,
folder: &mut F
) -> Result<(A, B, C), F::Error>
source§impl<'tcx, T> TypeFoldable<'tcx> for Option<T>where
T: TypeFoldable<'tcx>,
impl<'tcx, T> TypeFoldable<'tcx> for Option<T>where
T: TypeFoldable<'tcx>,
fn try_fold_with<V: FallibleTypeFolder<'tcx>>(
self,
folder: &mut V
) -> Result<Self, V::Error>
source§impl<'tcx, T, E> TypeFoldable<'tcx> for Result<T, E>where
T: TypeFoldable<'tcx>,
E: TypeFoldable<'tcx>,
impl<'tcx, T, E> TypeFoldable<'tcx> for Result<T, E>where
T: TypeFoldable<'tcx>,
E: TypeFoldable<'tcx>,
fn try_fold_with<V: FallibleTypeFolder<'tcx>>(
self,
folder: &mut V
) -> Result<Self, V::Error>
source§impl<'tcx, T: TypeFoldable<'tcx>> TypeFoldable<'tcx> for Rc<T>
impl<'tcx, T: TypeFoldable<'tcx>> TypeFoldable<'tcx> for Rc<T>
fn try_fold_with<F: FallibleTypeFolder<'tcx>>(
self,
folder: &mut F
) -> Result<Self, F::Error>
source§impl<'tcx, T: TypeFoldable<'tcx>> TypeFoldable<'tcx> for Arc<T>
impl<'tcx, T: TypeFoldable<'tcx>> TypeFoldable<'tcx> for Arc<T>
fn try_fold_with<F: FallibleTypeFolder<'tcx>>(
self,
folder: &mut F
) -> Result<Self, F::Error>
source§impl<'tcx, T: TypeFoldable<'tcx>> TypeFoldable<'tcx> for Box<T>
impl<'tcx, T: TypeFoldable<'tcx>> TypeFoldable<'tcx> for Box<T>
fn try_fold_with<F: FallibleTypeFolder<'tcx>>(
self,
folder: &mut F
) -> Result<Self, F::Error>
source§impl<'tcx, T: TypeFoldable<'tcx>> TypeFoldable<'tcx> for Vec<T>
impl<'tcx, T: TypeFoldable<'tcx>> TypeFoldable<'tcx> for Vec<T>
fn try_fold_with<F: FallibleTypeFolder<'tcx>>(
self,
folder: &mut F
) -> Result<Self, F::Error>
source§impl<'tcx, T: TypeFoldable<'tcx>> TypeFoldable<'tcx> for Box<[T]>
impl<'tcx, T: TypeFoldable<'tcx>> TypeFoldable<'tcx> for Box<[T]>
fn try_fold_with<F: FallibleTypeFolder<'tcx>>(
self,
folder: &mut F
) -> Result<Self, F::Error>
source§impl<'tcx, T: TypeFoldable<'tcx>, I: Idx> TypeFoldable<'tcx> for IndexVec<I, T>
impl<'tcx, T: TypeFoldable<'tcx>, I: Idx> TypeFoldable<'tcx> for IndexVec<I, T>
fn try_fold_with<F: FallibleTypeFolder<'tcx>>(
self,
folder: &mut F
) -> Result<Self, F::Error>
Implementors§
impl<'tcx> TypeFoldable<'tcx> for &'tcx List<Const<'tcx>>
impl<'tcx> TypeFoldable<'tcx> for &'tcx List<Predicate<'tcx>>
impl<'tcx> TypeFoldable<'tcx> for &'tcx List<Ty<'tcx>>
impl<'tcx> TypeFoldable<'tcx> for &'tcx List<PlaceElem<'tcx>>
impl<'tcx> TypeFoldable<'tcx> for &'tcx List<ProjectionKind>
impl<'tcx> TypeFoldable<'tcx> for &'tcx List<PolyExistentialPredicate<'tcx>>
impl<'tcx> TypeFoldable<'tcx> for PlaceBase
impl<'tcx> TypeFoldable<'tcx> for ProjectionKind
impl<'tcx> TypeFoldable<'tcx> for CanonicalTyVarKind
impl<'tcx> TypeFoldable<'tcx> for CanonicalVarKind<'tcx>
impl<'tcx> TypeFoldable<'tcx> for Certainty
impl<'tcx> TypeFoldable<'tcx> for CoverageKind
impl<'tcx> TypeFoldable<'tcx> for Op
impl<'tcx> TypeFoldable<'tcx> for BindingForm<'tcx>
impl<'tcx> TypeFoldable<'tcx> for ConstantKind<'tcx>
impl<'tcx> TypeFoldable<'tcx> for LocalInfo<'tcx>
impl<'tcx> TypeFoldable<'tcx> for Mutability
impl<'tcx> TypeFoldable<'tcx> for VarDebugInfoContents<'tcx>
impl<'tcx> TypeFoldable<'tcx> for ErrorHandled
impl<'tcx> TypeFoldable<'tcx> for ConstValue<'tcx>
impl<'tcx> TypeFoldable<'tcx> for Scalar
impl<'tcx> TypeFoldable<'tcx> for ConstraintCategory<'tcx>
impl<'tcx> TypeFoldable<'tcx> for ReturnConstraint
impl<'tcx> TypeFoldable<'tcx> for AggregateKind<'tcx>
impl<'tcx> TypeFoldable<'tcx> for BinOp
impl<'tcx> TypeFoldable<'tcx> for rustc_middle::mir::syntax::BorrowKind
impl<'tcx> TypeFoldable<'tcx> for rustc_middle::mir::syntax::CastKind
impl<'tcx> TypeFoldable<'tcx> for FakeReadCause
impl<'tcx> TypeFoldable<'tcx> for InlineAsmOperand<'tcx>
impl<'tcx> TypeFoldable<'tcx> for MirPhase
impl<'tcx> TypeFoldable<'tcx> for NonDivergingIntrinsic<'tcx>
impl<'tcx> TypeFoldable<'tcx> for NullOp
impl<'tcx> TypeFoldable<'tcx> for Operand<'tcx>
impl<'tcx> TypeFoldable<'tcx> for RetagKind
impl<'tcx> TypeFoldable<'tcx> for Rvalue<'tcx>
impl<'tcx> TypeFoldable<'tcx> for StatementKind<'tcx>
impl<'tcx> TypeFoldable<'tcx> for TerminatorKind<'tcx>
impl<'tcx> TypeFoldable<'tcx> for UnOp
impl<'tcx> TypeFoldable<'tcx> for Reveal
impl<'tcx> TypeFoldable<'tcx> for SelectionError<'tcx>
impl<'tcx> TypeFoldable<'tcx> for OutlivesBound<'tcx>
impl<'tcx> TypeFoldable<'tcx> for OverflowError
impl<'tcx> TypeFoldable<'tcx> for SelectionCandidate<'tcx>
impl<'tcx> TypeFoldable<'tcx> for rustc_middle::ty::abstract_const::CastKind
impl<'tcx> TypeFoldable<'tcx> for NotConstEvaluatable
impl<'tcx> TypeFoldable<'tcx> for Adjust<'tcx>
impl<'tcx> TypeFoldable<'tcx> for AutoBorrow<'tcx>
impl<'tcx> TypeFoldable<'tcx> for AutoBorrowMutability
impl<'tcx> TypeFoldable<'tcx> for PointerCast
impl<'tcx> TypeFoldable<'tcx> for AdtKind
impl<'tcx> TypeFoldable<'tcx> for AssocKind
impl<'tcx> TypeFoldable<'tcx> for BindingMode
impl<'tcx> TypeFoldable<'tcx> for rustc_middle::ty::closure::BorrowKind
impl<'tcx> TypeFoldable<'tcx> for ClosureKind
impl<'tcx> TypeFoldable<'tcx> for UpvarCapture
impl<'tcx> TypeFoldable<'tcx> for ConstKind<'tcx>
impl<'tcx> TypeFoldable<'tcx> for Expr<'tcx>
impl<'tcx> TypeFoldable<'tcx> for InferConst<'tcx>
impl<'tcx> TypeFoldable<'tcx> for ValTree<'tcx>
impl<'tcx> TypeFoldable<'tcx> for BoundConstness
impl<'tcx> TypeFoldable<'tcx> for Clause<'tcx>
impl<'tcx> TypeFoldable<'tcx> for FloatTy
impl<'tcx> TypeFoldable<'tcx> for ImplPolarity
impl<'tcx> TypeFoldable<'tcx> for ImplSubject<'tcx>
impl<'tcx> TypeFoldable<'tcx> for InferTy
impl<'tcx> TypeFoldable<'tcx> for IntVarValue
impl<'tcx> TypeFoldable<'tcx> for PredicateKind<'tcx>
impl<'tcx> TypeFoldable<'tcx> for TermKind<'tcx>
impl<'tcx> TypeFoldable<'tcx> for Variance
impl<'tcx> TypeFoldable<'tcx> for TypeError<'tcx>
impl<'tcx> TypeFoldable<'tcx> for InstanceDef<'tcx>
impl<'tcx> TypeFoldable<'tcx> for BoundRegionKind
impl<'tcx> TypeFoldable<'tcx> for ExistentialPredicate<'tcx>
impl<'tcx> TypeFoldable<'tcx> for UserType<'tcx>
impl<'tcx> TypeFoldable<'tcx> for rustc_middle::hir::place::Place<'tcx>
impl<'tcx> TypeFoldable<'tcx> for PlaceWithHirId<'tcx>
impl<'tcx> TypeFoldable<'tcx> for Projection<'tcx>
impl<'tcx> TypeFoldable<'tcx> for CanonicalVarInfo<'tcx>
impl<'tcx> TypeFoldable<'tcx> for CanonicalVarValues<'tcx>
impl<'tcx> TypeFoldable<'tcx> for QueryRegionConstraints<'tcx>
impl<'tcx> TypeFoldable<'tcx> for MemberConstraint<'tcx>
impl<'tcx> TypeFoldable<'tcx> for Scope
impl<'tcx> TypeFoldable<'tcx> for BasicBlocks<'tcx>
impl<'tcx> TypeFoldable<'tcx> for CodeRegion
impl<'tcx> TypeFoldable<'tcx> for CounterValueReference
impl<'tcx> TypeFoldable<'tcx> for ExpressionOperandId
impl<'tcx> TypeFoldable<'tcx> for InjectedExpressionId
impl<'tcx> TypeFoldable<'tcx> for InjectedExpressionIndex
impl<'tcx> TypeFoldable<'tcx> for MappedExpressionIndex
impl<'tcx> TypeFoldable<'tcx> for GraphIsCyclicCache
impl<'tcx> TypeFoldable<'tcx> for GlobalId<'tcx>
impl<'tcx> TypeFoldable<'tcx> for PredecessorCache
impl<'tcx> TypeFoldable<'tcx> for GeneratorLayout<'tcx>
impl<'tcx> TypeFoldable<'tcx> for GeneratorSavedLocal
impl<'tcx> TypeFoldable<'tcx> for BasicBlock
impl<'tcx> TypeFoldable<'tcx> for BasicBlockData<'tcx>
impl<'tcx> TypeFoldable<'tcx> for BlockTailInfo
impl<'tcx> TypeFoldable<'tcx> for Body<'tcx>
impl<'tcx> TypeFoldable<'tcx> for Constant<'tcx>
impl<'tcx> TypeFoldable<'tcx> for Field
impl<'tcx> TypeFoldable<'tcx> for GeneratorInfo<'tcx>
impl<'tcx> TypeFoldable<'tcx> for Local
impl<'tcx> TypeFoldable<'tcx> for LocalDecl<'tcx>
impl<'tcx> TypeFoldable<'tcx> for MirSource<'tcx>
impl<'tcx> TypeFoldable<'tcx> for Promoted
impl<'tcx> TypeFoldable<'tcx> for SourceInfo
impl<'tcx> TypeFoldable<'tcx> for SourceScope
impl<'tcx> TypeFoldable<'tcx> for SourceScopeData<'tcx>
impl<'tcx> TypeFoldable<'tcx> for SourceScopeLocalData
impl<'tcx> TypeFoldable<'tcx> for Statement<'tcx>
impl<'tcx> TypeFoldable<'tcx> for rustc_middle::mir::UnevaluatedConst<'tcx>
impl<'tcx> TypeFoldable<'tcx> for UserTypeProjection
impl<'tcx> TypeFoldable<'tcx> for UserTypeProjections
impl<'tcx> TypeFoldable<'tcx> for VarDebugInfo<'tcx>
impl<'tcx> TypeFoldable<'tcx> for VarDebugInfoFragment<'tcx>
impl<'tcx> TypeFoldable<'tcx> for SwitchSourceCache
impl<'tcx> TypeFoldable<'tcx> for CopyNonOverlapping<'tcx>
impl<'tcx> TypeFoldable<'tcx> for Coverage
impl<'tcx> TypeFoldable<'tcx> for rustc_middle::mir::syntax::Place<'tcx>
impl<'tcx> TypeFoldable<'tcx> for PlaceTy<'tcx>
impl<'tcx> TypeFoldable<'tcx> for SwitchTargets
impl<'tcx> TypeFoldable<'tcx> for Terminator<'tcx>
impl<'tcx> TypeFoldable<'tcx> for PostorderCache
impl<'tcx> TypeFoldable<'tcx> for LocalVarId
impl<'tcx> TypeFoldable<'tcx> for ChalkEnvironmentAndGoal<'tcx>
impl<'tcx> TypeFoldable<'tcx> for DropckOutlivesResult<'tcx>
impl<'tcx> TypeFoldable<'tcx> for NormalizationResult<'tcx>
impl<'tcx> TypeFoldable<'tcx> for AscribeUserType<'tcx>
impl<'tcx> TypeFoldable<'tcx> for Eq<'tcx>
impl<'tcx> TypeFoldable<'tcx> for ProvePredicate<'tcx>
impl<'tcx> TypeFoldable<'tcx> for Subtype<'tcx>
impl<'tcx> TypeFoldable<'tcx> for IfExpressionCause<'tcx>
impl<'tcx> TypeFoldable<'tcx> for Adjustment<'tcx>
impl<'tcx> TypeFoldable<'tcx> for OverloadedDeref<'tcx>
impl<'tcx> TypeFoldable<'tcx> for AdtDef<'tcx>
AdtDefs are basically the same as a DefId.
impl<'tcx> TypeFoldable<'tcx> for AssocItem
impl<'tcx> TypeFoldable<'tcx> for CaptureInfo
impl<'tcx> TypeFoldable<'tcx> for CapturedPlace<'tcx>
impl<'tcx> TypeFoldable<'tcx> for UpvarId
impl<'tcx> TypeFoldable<'tcx> for UpvarPath
impl<'tcx> TypeFoldable<'tcx> for rustc_middle::ty::consts::kind::UnevaluatedConst<'tcx>
impl<'tcx> TypeFoldable<'tcx> for Const<'tcx>
impl<'tcx> TypeFoldable<'tcx> for Instance<'tcx>
impl<'tcx> TypeFoldable<'tcx> for PrintClosureAsImpl<'tcx>
impl<'tcx> TypeFoldable<'tcx> for TraitPredPrintModifiersAndPath<'tcx>
impl<'tcx> TypeFoldable<'tcx> for TraitRefPrintOnlyTraitName<'tcx>
impl<'tcx> TypeFoldable<'tcx> for TraitRefPrintOnlyTraitPath<'tcx>
impl<'tcx> TypeFoldable<'tcx> for GeneratorWitness<'tcx>
impl<'tcx> TypeFoldable<'tcx> for ClosureSizeProfileData<'tcx>
impl<'tcx> TypeFoldable<'tcx> for CoercePredicate<'tcx>
impl<'tcx> TypeFoldable<'tcx> for DebruijnIndex
impl<'tcx> TypeFoldable<'tcx> for ImplHeader<'tcx>
impl<'tcx> TypeFoldable<'tcx> for InstantiatedPredicates<'tcx>
impl<'tcx> TypeFoldable<'tcx> for OpaqueHiddenType<'tcx>
impl<'tcx> TypeFoldable<'tcx> for OpaqueTypeKey<'tcx>
impl<'tcx> TypeFoldable<'tcx> for ParamEnv<'tcx>
impl<'tcx> TypeFoldable<'tcx> for Placeholder<BoundRegionKind>
impl<'tcx> TypeFoldable<'tcx> for Placeholder<BoundVar>
impl<'tcx> TypeFoldable<'tcx> for Predicate<'tcx>
impl<'tcx> TypeFoldable<'tcx> for ProjectionPredicate<'tcx>
impl<'tcx> TypeFoldable<'tcx> for SubtypePredicate<'tcx>
impl<'tcx> TypeFoldable<'tcx> for Term<'tcx>
impl<'tcx> TypeFoldable<'tcx> for TraitPredicate<'tcx>
impl<'tcx> TypeFoldable<'tcx> for Ty<'tcx>
impl<'tcx> TypeFoldable<'tcx> for UniverseIndex
impl<'tcx> TypeFoldable<'tcx> for AliasTy<'tcx>
impl<'tcx> TypeFoldable<'tcx> for BoundVar
impl<'tcx> TypeFoldable<'tcx> for ClosureSubsts<'tcx>
impl<'tcx> TypeFoldable<'tcx> for ExistentialProjection<'tcx>
impl<'tcx> TypeFoldable<'tcx> for ExistentialTraitRef<'tcx>
impl<'tcx> TypeFoldable<'tcx> for FnSig<'tcx>
impl<'tcx> TypeFoldable<'tcx> for FreeRegion
impl<'tcx> TypeFoldable<'tcx> for GenSig<'tcx>
impl<'tcx> TypeFoldable<'tcx> for GeneratorSubsts<'tcx>
impl<'tcx> TypeFoldable<'tcx> for InlineConstSubsts<'tcx>
impl<'tcx> TypeFoldable<'tcx> for ParamConst
impl<'tcx> TypeFoldable<'tcx> for ParamTy
impl<'tcx> TypeFoldable<'tcx> for Region<'tcx>
impl<'tcx> TypeFoldable<'tcx> for RegionVid
impl<'tcx> TypeFoldable<'tcx> for TraitRef<'tcx>
impl<'tcx> TypeFoldable<'tcx> for TypeAndMut<'tcx>
impl<'tcx> TypeFoldable<'tcx> for GenericArg<'tcx>
impl<'tcx> TypeFoldable<'tcx> for UserSelfTy<'tcx>
impl<'tcx> TypeFoldable<'tcx> for UserSubsts<'tcx>
impl<'tcx> TypeFoldable<'tcx> for CanonicalUserTypeAnnotation<'tcx>
impl<'tcx> TypeFoldable<'tcx> for GeneratorInteriorTypeCause<'tcx>
impl<'tcx> TypeFoldable<'tcx> for UserTypeAnnotationIndex
impl<'tcx> TypeFoldable<'tcx> for CanonicalVarInfos<'tcx>
impl<'tcx> TypeFoldable<'tcx> for SubstsRef<'tcx>
impl<'tcx, A, B> TypeFoldable<'tcx> for OutlivesPredicate<A, B>where
A: TypeFoldable<'tcx>,
B: TypeFoldable<'tcx>,
impl<'tcx, N> TypeFoldable<'tcx> for ImplSource<'tcx, N>where
N: TypeFoldable<'tcx>,
impl<'tcx, N> TypeFoldable<'tcx> for ImplSourceAutoImplData<N>where
N: TypeFoldable<'tcx>,
impl<'tcx, N> TypeFoldable<'tcx> for ImplSourceBuiltinData<N>where
N: TypeFoldable<'tcx>,
impl<'tcx, N> TypeFoldable<'tcx> for ImplSourceClosureData<'tcx, N>where
N: TypeFoldable<'tcx>,
impl<'tcx, N> TypeFoldable<'tcx> for ImplSourceConstDestructData<N>where
N: TypeFoldable<'tcx>,
impl<'tcx, N> TypeFoldable<'tcx> for ImplSourceFnPointerData<'tcx, N>where
N: TypeFoldable<'tcx>,
impl<'tcx, N> TypeFoldable<'tcx> for ImplSourceFutureData<'tcx, N>where
N: TypeFoldable<'tcx>,
impl<'tcx, N> TypeFoldable<'tcx> for ImplSourceGeneratorData<'tcx, N>where
N: TypeFoldable<'tcx>,
impl<'tcx, N> TypeFoldable<'tcx> for ImplSourceObjectData<'tcx, N>where
N: TypeFoldable<'tcx>,
impl<'tcx, N> TypeFoldable<'tcx> for ImplSourceTraitAliasData<'tcx, N>where
N: TypeFoldable<'tcx>,
impl<'tcx, N> TypeFoldable<'tcx> for ImplSourceTraitUpcastingData<'tcx, N>where
N: TypeFoldable<'tcx>,
impl<'tcx, N> TypeFoldable<'tcx> for ImplSourceUserDefinedData<'tcx, N>where
N: TypeFoldable<'tcx>,
impl<'tcx, O> TypeFoldable<'tcx> for AssertKind<O>where
O: TypeFoldable<'tcx>,
impl<'tcx, R> TypeFoldable<'tcx> for QueryResponse<'tcx, R>where
R: TypeFoldable<'tcx>,
impl<'tcx, T> !TypeFoldable<'tcx> for EarlyBinder<T>
For early binders, you should first call subst
before using any visitors.