Trait rustc_middle::ty::fold::TypeFoldable
source · [−]pub trait TypeFoldable<'tcx>: Debug + Clone {
Show 24 methods
fn try_fold_with<F: FallibleTypeFolder<'tcx>>(
self,
folder: &mut F
) -> Result<Self, F::Error>;
fn visit_with<V: TypeVisitor<'tcx>>(
&self,
visitor: &mut V
) -> ControlFlow<V::BreakTy>;
fn fold_with<F: TypeFolder<'tcx, Error = !>>(self, folder: &mut F) -> Self { ... }
fn has_vars_bound_at_or_above(&self, binder: DebruijnIndex) -> bool { ... }
fn has_vars_bound_above(&self, binder: DebruijnIndex) -> bool { ... }
fn has_escaping_bound_vars(&self) -> bool { ... }
fn has_type_flags(&self, flags: TypeFlags) -> bool { ... }
fn has_projections(&self) -> bool { ... }
fn has_opaque_types(&self) -> bool { ... }
fn references_error(&self) -> bool { ... }
fn error_reported(&self) -> Option<ErrorGuaranteed> { ... }
fn has_param_types_or_consts(&self) -> bool { ... }
fn has_infer_regions(&self) -> bool { ... }
fn has_infer_types(&self) -> bool { ... }
fn has_infer_types_or_consts(&self) -> bool { ... }
fn needs_infer(&self) -> bool { ... }
fn has_placeholders(&self) -> bool { ... }
fn needs_subst(&self) -> bool { ... }
fn has_free_regions(&self) -> bool { ... }
fn has_erased_regions(&self) -> bool { ... }
fn has_erasable_regions(&self) -> bool { ... }
fn is_global(&self) -> bool { ... }
fn has_late_bound_regions(&self) -> bool { ... }
fn still_further_specializable(&self) -> bool { ... }
}Expand description
This trait is implemented for every type that can be folded/visited, providing the skeleton of the traversal.
To implement this conveniently, use the derive macro located in
rustc_macros.
Required Methods
fn 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.
fn visit_with<V: TypeVisitor<'tcx>>(
&self,
visitor: &mut V
) -> ControlFlow<V::BreakTy>
fn visit_with<V: TypeVisitor<'tcx>>(
&self,
visitor: &mut V
) -> ControlFlow<V::BreakTy>
The entry point for visiting. To visit a value t with a visitor v
call: t.visit_with(v).
For most types, this just traverses the value, calling visit_with on
each field/element.
For types of interest (such as Ty), the implementation of this method
that calls a visitor method specifically for that type (such as
V::visit_ty). This is where control transfers from TypeFoldable to
TypeVisitor.
Provided Methods
fn fold_with<F: TypeFolder<'tcx, Error = !>>(self, folder: &mut F) -> Self
fn fold_with<F: TypeFolder<'tcx, Error = !>>(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.
fn has_vars_bound_at_or_above(&self, binder: DebruijnIndex) -> bool
fn has_vars_bound_at_or_above(&self, binder: DebruijnIndex) -> bool
Returns true if self has any late-bound regions that are either
bound by binder or bound by some binder outside of binder.
If binder is ty::INNERMOST, this indicates whether
there are any late-bound regions that appear free.
fn has_vars_bound_above(&self, binder: DebruijnIndex) -> bool
fn has_vars_bound_above(&self, binder: DebruijnIndex) -> bool
Returns true if this self has any regions that escape binder (and
hence are not bound by it).
fn has_escaping_bound_vars(&self) -> bool
fn has_type_flags(&self, flags: TypeFlags) -> bool
fn has_projections(&self) -> bool
fn has_opaque_types(&self) -> bool
fn references_error(&self) -> bool
fn error_reported(&self) -> Option<ErrorGuaranteed>
fn has_param_types_or_consts(&self) -> bool
fn has_infer_regions(&self) -> bool
fn has_infer_types(&self) -> bool
fn has_infer_types_or_consts(&self) -> bool
fn needs_infer(&self) -> bool
fn has_placeholders(&self) -> bool
fn needs_subst(&self) -> bool
fn has_free_regions(&self) -> bool
fn has_free_regions(&self) -> bool
“Free” regions in this context means that it has any region that is not (a) erased or (b) late-bound.
fn has_erased_regions(&self) -> bool
fn has_erasable_regions(&self) -> bool
fn has_erasable_regions(&self) -> bool
True if there are any un-erased free regions.
Indicates whether this value references only ‘global’ generic parameters that are the same regardless of what fn we are in. This is used for caching.
fn has_late_bound_regions(&self) -> bool
fn has_late_bound_regions(&self) -> bool
True if there are any late-bound regions
fn still_further_specializable(&self) -> bool
fn still_further_specializable(&self) -> bool
Indicates whether this value still has parameters/placeholders/inference variables
which could be replaced later, in a way that would change the results of impl
specialization.
Implementations on Foreign Types
sourceimpl<'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 visit_with<V: TypeVisitor<'tcx>>(&self, _: &mut V) -> ControlFlow<V::BreakTy>
sourceimpl<'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>
fn visit_with<V: TypeVisitor<'tcx>>(&self, _: &mut V) -> ControlFlow<V::BreakTy>
sourceimpl<'tcx> TypeFoldable<'tcx> for ()
impl<'tcx> TypeFoldable<'tcx> for ()
fn try_fold_with<F: FallibleTypeFolder<'tcx>>(
self,
_: &mut F
) -> Result<(), F::Error>
fn visit_with<F: TypeVisitor<'tcx>>(&self, _: &mut F) -> ControlFlow<F::BreakTy>
sourceimpl<'tcx> TypeFoldable<'tcx> for bool
impl<'tcx> TypeFoldable<'tcx> for bool
fn try_fold_with<F: FallibleTypeFolder<'tcx>>(
self,
_: &mut F
) -> Result<bool, F::Error>
fn visit_with<F: TypeVisitor<'tcx>>(&self, _: &mut F) -> ControlFlow<F::BreakTy>
sourceimpl<'tcx> TypeFoldable<'tcx> for usize
impl<'tcx> TypeFoldable<'tcx> for usize
fn try_fold_with<F: FallibleTypeFolder<'tcx>>(
self,
_: &mut F
) -> Result<usize, F::Error>
fn visit_with<F: TypeVisitor<'tcx>>(&self, _: &mut F) -> ControlFlow<F::BreakTy>
sourceimpl<'tcx> TypeFoldable<'tcx> for VariantIdx
impl<'tcx> TypeFoldable<'tcx> for VariantIdx
fn try_fold_with<F: FallibleTypeFolder<'tcx>>(
self,
_: &mut F
) -> Result<VariantIdx, F::Error>
fn visit_with<F: TypeVisitor<'tcx>>(&self, _: &mut F) -> ControlFlow<F::BreakTy>
sourceimpl<'tcx> TypeFoldable<'tcx> for u32
impl<'tcx> TypeFoldable<'tcx> for u32
fn try_fold_with<F: FallibleTypeFolder<'tcx>>(
self,
_: &mut F
) -> Result<u32, F::Error>
fn visit_with<F: TypeVisitor<'tcx>>(&self, _: &mut F) -> ControlFlow<F::BreakTy>
sourceimpl<'tcx> TypeFoldable<'tcx> for u64
impl<'tcx> TypeFoldable<'tcx> for u64
fn try_fold_with<F: FallibleTypeFolder<'tcx>>(
self,
_: &mut F
) -> Result<u64, F::Error>
fn visit_with<F: TypeVisitor<'tcx>>(&self, _: &mut F) -> ControlFlow<F::BreakTy>
sourceimpl<'tcx> TypeFoldable<'tcx> for String
impl<'tcx> TypeFoldable<'tcx> for String
fn try_fold_with<F: FallibleTypeFolder<'tcx>>(
self,
_: &mut F
) -> Result<String, F::Error>
fn visit_with<F: TypeVisitor<'tcx>>(&self, _: &mut F) -> ControlFlow<F::BreakTy>
sourceimpl<'tcx> TypeFoldable<'tcx> for InlineAsmOptions
impl<'tcx> TypeFoldable<'tcx> for InlineAsmOptions
fn try_fold_with<F: FallibleTypeFolder<'tcx>>(
self,
_: &mut F
) -> Result<InlineAsmOptions, F::Error>
fn visit_with<F: TypeVisitor<'tcx>>(&self, _: &mut F) -> ControlFlow<F::BreakTy>
sourceimpl<'tcx> TypeFoldable<'tcx> for InlineAsmTemplatePiece
impl<'tcx> TypeFoldable<'tcx> for InlineAsmTemplatePiece
fn try_fold_with<F: FallibleTypeFolder<'tcx>>(
self,
_: &mut F
) -> Result<InlineAsmTemplatePiece, F::Error>
fn visit_with<F: TypeVisitor<'tcx>>(&self, _: &mut F) -> ControlFlow<F::BreakTy>
sourceimpl<'tcx> TypeFoldable<'tcx> for NodeId
impl<'tcx> TypeFoldable<'tcx> for NodeId
fn try_fold_with<F: FallibleTypeFolder<'tcx>>(
self,
_: &mut F
) -> Result<NodeId, F::Error>
fn visit_with<F: TypeVisitor<'tcx>>(&self, _: &mut F) -> ControlFlow<F::BreakTy>
sourceimpl<'tcx> TypeFoldable<'tcx> for Symbol
impl<'tcx> TypeFoldable<'tcx> for Symbol
fn try_fold_with<F: FallibleTypeFolder<'tcx>>(
self,
_: &mut F
) -> Result<Symbol, F::Error>
fn visit_with<F: TypeVisitor<'tcx>>(&self, _: &mut F) -> ControlFlow<F::BreakTy>
sourceimpl<'tcx> TypeFoldable<'tcx> for Res
impl<'tcx> TypeFoldable<'tcx> for Res
fn try_fold_with<F: FallibleTypeFolder<'tcx>>(
self,
_: &mut F
) -> Result<Res, F::Error>
fn visit_with<F: TypeVisitor<'tcx>>(&self, _: &mut F) -> ControlFlow<F::BreakTy>
sourceimpl<'tcx> TypeFoldable<'tcx> for DefId
impl<'tcx> TypeFoldable<'tcx> for DefId
fn try_fold_with<F: FallibleTypeFolder<'tcx>>(
self,
_: &mut F
) -> Result<DefId, F::Error>
fn visit_with<F: TypeVisitor<'tcx>>(&self, _: &mut F) -> ControlFlow<F::BreakTy>
sourceimpl<'tcx> TypeFoldable<'tcx> for LocalDefId
impl<'tcx> TypeFoldable<'tcx> for LocalDefId
fn try_fold_with<F: FallibleTypeFolder<'tcx>>(
self,
_: &mut F
) -> Result<LocalDefId, F::Error>
fn visit_with<F: TypeVisitor<'tcx>>(&self, _: &mut F) -> ControlFlow<F::BreakTy>
sourceimpl<'tcx> TypeFoldable<'tcx> for HirId
impl<'tcx> TypeFoldable<'tcx> for HirId
fn try_fold_with<F: FallibleTypeFolder<'tcx>>(
self,
_: &mut F
) -> Result<HirId, F::Error>
fn visit_with<F: TypeVisitor<'tcx>>(&self, _: &mut F) -> ControlFlow<F::BreakTy>
sourceimpl<'tcx> TypeFoldable<'tcx> for MatchSource
impl<'tcx> TypeFoldable<'tcx> for MatchSource
fn try_fold_with<F: FallibleTypeFolder<'tcx>>(
self,
_: &mut F
) -> Result<MatchSource, F::Error>
fn visit_with<F: TypeVisitor<'tcx>>(&self, _: &mut F) -> ControlFlow<F::BreakTy>
sourceimpl<'tcx> TypeFoldable<'tcx> for Unsafety
impl<'tcx> TypeFoldable<'tcx> for Unsafety
fn try_fold_with<F: FallibleTypeFolder<'tcx>>(
self,
_: &mut F
) -> Result<Unsafety, F::Error>
fn visit_with<F: TypeVisitor<'tcx>>(&self, _: &mut F) -> ControlFlow<F::BreakTy>
sourceimpl<'tcx> TypeFoldable<'tcx> for InlineAsmRegOrRegClass
impl<'tcx> TypeFoldable<'tcx> for InlineAsmRegOrRegClass
fn try_fold_with<F: FallibleTypeFolder<'tcx>>(
self,
_: &mut F
) -> Result<InlineAsmRegOrRegClass, F::Error>
fn visit_with<F: TypeVisitor<'tcx>>(&self, _: &mut F) -> ControlFlow<F::BreakTy>
sourceimpl<'tcx> TypeFoldable<'tcx> for Abi
impl<'tcx> TypeFoldable<'tcx> for Abi
fn try_fold_with<F: FallibleTypeFolder<'tcx>>(
self,
_: &mut F
) -> Result<Abi, F::Error>
fn visit_with<F: TypeVisitor<'tcx>>(&self, _: &mut F) -> ControlFlow<F::BreakTy>
sourceimpl<'tcx> TypeFoldable<'tcx> for Span
impl<'tcx> TypeFoldable<'tcx> for Span
fn try_fold_with<F: FallibleTypeFolder<'tcx>>(
self,
_: &mut F
) -> Result<Span, F::Error>
fn visit_with<F: TypeVisitor<'tcx>>(&self, _: &mut F) -> ControlFlow<F::BreakTy>
sourceimpl<'tcx> TypeFoldable<'tcx> for ErrorGuaranteed
impl<'tcx> TypeFoldable<'tcx> for ErrorGuaranteed
fn try_fold_with<F: FallibleTypeFolder<'tcx>>(
self,
_: &mut F
) -> Result<ErrorGuaranteed, F::Error>
fn visit_with<F: TypeVisitor<'tcx>>(&self, _: &mut F) -> ControlFlow<F::BreakTy>
sourceimpl<'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>
fn visit_with<V: TypeVisitor<'tcx>>(
&self,
visitor: &mut V
) -> ControlFlow<V::BreakTy>
sourceimpl<'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>
fn visit_with<V: TypeVisitor<'tcx>>(
&self,
visitor: &mut V
) -> ControlFlow<V::BreakTy>
sourceimpl<'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>
fn visit_with<V: TypeVisitor<'tcx>>(
&self,
visitor: &mut V
) -> ControlFlow<V::BreakTy>
sourceimpl<'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>
fn visit_with<V: TypeVisitor<'tcx>>(
&self,
visitor: &mut V
) -> ControlFlow<V::BreakTy>
sourceimpl<'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>
fn visit_with<V: TypeVisitor<'tcx>>(
&self,
visitor: &mut V
) -> ControlFlow<V::BreakTy>
sourceimpl<'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>
fn visit_with<V: TypeVisitor<'tcx>>(
&self,
visitor: &mut V
) -> ControlFlow<V::BreakTy>
sourceimpl<'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>
fn visit_with<V: TypeVisitor<'tcx>>(
&self,
visitor: &mut V
) -> ControlFlow<V::BreakTy>
sourceimpl<'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>
fn visit_with<V: TypeVisitor<'tcx>>(
&self,
visitor: &mut V
) -> ControlFlow<V::BreakTy>
sourceimpl<'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>
fn visit_with<V: TypeVisitor<'tcx>>(
&self,
visitor: &mut V
) -> ControlFlow<V::BreakTy>
sourceimpl<'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>
fn visit_with<V: TypeVisitor<'tcx>>(
&self,
visitor: &mut V
) -> ControlFlow<V::BreakTy>
sourceimpl<'tcx> TypeFoldable<'tcx> for Constness
impl<'tcx> TypeFoldable<'tcx> for Constness
fn try_fold_with<F: FallibleTypeFolder<'tcx>>(
self,
_: &mut F
) -> Result<Self, F::Error>
fn visit_with<V: TypeVisitor<'tcx>>(&self, _: &mut V) -> ControlFlow<V::BreakTy>
Implementors
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<Binder<'tcx, ExistentialPredicate<'tcx>>>
impl<'tcx> TypeFoldable<'tcx> for &'tcx List<PlaceElem<'tcx>>
impl<'tcx> TypeFoldable<'tcx> for &'tcx List<ProjectionKind>
impl<'tcx> TypeFoldable<'tcx> for PlaceBase
impl<'tcx> TypeFoldable<'tcx> for rustc_middle::hir::place::ProjectionKind
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 FakeReadCause
impl<'tcx> TypeFoldable<'tcx> for InlineAsmOperand<'tcx>
impl<'tcx> TypeFoldable<'tcx> for LocalInfo<'tcx>
impl<'tcx> TypeFoldable<'tcx> for MirPhase
impl<'tcx> TypeFoldable<'tcx> for Mutability
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 VarDebugInfoContents<'tcx>
impl<'tcx> TypeFoldable<'tcx> for ErrorHandled
impl<'tcx> TypeFoldable<'tcx> for NotConstEvaluatable
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 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 BindingMode
impl<'tcx> TypeFoldable<'tcx> for 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 InferConst<'tcx>
impl<'tcx> TypeFoldable<'tcx> for UserType<'tcx>
impl<'tcx> TypeFoldable<'tcx> for BoundConstness
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 Term<'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 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 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 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 CopyNonOverlapping<'tcx>
impl<'tcx> TypeFoldable<'tcx> for Coverage
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 rustc_middle::mir::Place<'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 UserTypeProjection
impl<'tcx> TypeFoldable<'tcx> for UserTypeProjections
impl<'tcx> TypeFoldable<'tcx> for VarDebugInfo<'tcx>
impl<'tcx> TypeFoldable<'tcx> for SwitchSourceCache
impl<'tcx> TypeFoldable<'tcx> for PlaceTy<'tcx>
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
impl<'tcx> TypeFoldable<'tcx> for ImplSourceDiscriminantKindData
impl<'tcx> TypeFoldable<'tcx> for ImplSourcePointeeData
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.