rustc_trait_selection::infer::canonical::ir::fold

Trait TypeFolder

Source
pub trait TypeFolder<I>: FallibleTypeFolder<I, Error = !>
where I: Interner,
{ // Required method fn cx(&self) -> I; // Provided methods fn fold_binder<T>(&mut self, t: Binder<I, T>) -> Binder<I, T> where T: TypeFoldable<I> { ... } fn fold_ty(&mut self, t: <I as Interner>::Ty) -> <I as Interner>::Ty { ... } fn fold_region( &mut self, r: <I as Interner>::Region, ) -> <I as Interner>::Region { ... } fn fold_const( &mut self, c: <I as Interner>::Const, ) -> <I as Interner>::Const { ... } fn fold_predicate( &mut self, p: <I as Interner>::Predicate, ) -> <I as Interner>::Predicate { ... } }
Expand description

This trait is implemented for every infallible folding traversal. There is a fold method defined for every type of interest. Each such method has a default that does an “identity” fold. Implementations of these methods often fall back to a super_fold_with method if the primary argument doesn’t satisfy a particular condition.

A blanket implementation of FallibleTypeFolder will defer to the infallible methods of this trait to ensure that the two APIs are coherent.

Required Methods§

Source

fn cx(&self) -> I

Provided Methods§

Source

fn fold_binder<T>(&mut self, t: Binder<I, T>) -> Binder<I, T>
where T: TypeFoldable<I>,

Source

fn fold_ty(&mut self, t: <I as Interner>::Ty) -> <I as Interner>::Ty

Source

fn fold_region(&mut self, r: <I as Interner>::Region) -> <I as Interner>::Region

Source

fn fold_const(&mut self, c: <I as Interner>::Const) -> <I as Interner>::Const

Source

fn fold_predicate( &mut self, p: <I as Interner>::Predicate, ) -> <I as Interner>::Predicate

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementations on Foreign Types§

Source§

impl<'tcx, F, G, H> TypeFolder<TyCtxt<'tcx>> for BottomUpFolder<'tcx, F, G, H>
where F: FnMut(Ty<'tcx>) -> Ty<'tcx>, G: FnMut(Region<'tcx>) -> Region<'tcx>, H: FnMut(Const<'tcx>) -> Const<'tcx>,

Source§

fn cx(&self) -> TyCtxt<'tcx>

Source§

fn fold_ty(&mut self, ty: Ty<'tcx>) -> Ty<'tcx>

Source§

fn fold_region(&mut self, r: Region<'tcx>) -> Region<'tcx>

Source§

fn fold_const(&mut self, ct: Const<'tcx>) -> Const<'tcx>

Source§

impl<D, I> TypeFolder<I> for Canonicalizer<'_, D, I>
where D: SolverDelegate<Interner = I>, I: Interner,

Source§

fn cx(&self) -> I

Source§

fn fold_binder<T>(&mut self, t: Binder<I, T>) -> Binder<I, T>
where T: TypeFoldable<I>,

Source§

fn fold_region(&mut self, r: <I as Interner>::Region) -> <I as Interner>::Region

Source§

fn fold_ty(&mut self, t: <I as Interner>::Ty) -> <I as Interner>::Ty

Source§

fn fold_const(&mut self, c: <I as Interner>::Const) -> <I as Interner>::Const

Source§

impl<D, I> TypeFolder<I> for EagerResolver<'_, D, I>
where D: SolverDelegate<Interner = I>, I: Interner,

Source§

fn cx(&self) -> I

Source§

fn fold_ty(&mut self, t: <I as Interner>::Ty) -> <I as Interner>::Ty

Source§

fn fold_region(&mut self, r: <I as Interner>::Region) -> <I as Interner>::Region

Source§

fn fold_const(&mut self, c: <I as Interner>::Const) -> <I as Interner>::Const

Implementors§

Source§

impl<'a, 'b, 'tcx> TypeFolder<TyCtxt<'tcx>> for AssocTypeNormalizer<'a, 'b, 'tcx>

Source§

impl<'a, 'tcx> TypeFolder<TyCtxt<'tcx>> for OpportunisticRegionResolver<'a, 'tcx>

Source§

impl<'a, 'tcx> TypeFolder<TyCtxt<'tcx>> for OpportunisticVarResolver<'a, 'tcx>

Source§

impl<'a, 'tcx> TypeFolder<TyCtxt<'tcx>> for TypeFreshener<'a, 'tcx>

Source§

impl<'a, I> TypeFolder<I> for RegionFolder<'a, I>
where I: Interner,

Source§

impl<'tcx> TypeFolder<TyCtxt<'tcx>> for ClosureEraser<'tcx>

Source§

impl<'tcx> TypeFolder<TyCtxt<'tcx>> for ReplaceImplTraitFolder<'tcx>

Source§

impl<'tcx> TypeFolder<TyCtxt<'tcx>> for DeeplyNormalizeForDiagnosticsFolder<'_, 'tcx>

Source§

impl<'tcx> TypeFolder<TyCtxt<'tcx>> for EraseEscapingBoundRegions<'tcx>

Source§

impl<'tcx> TypeFolder<TyCtxt<'tcx>> for BoundVarReplacer<'_, 'tcx>

Source§

impl<'tcx> TypeFolder<TyCtxt<'tcx>> for PlaceholderReplacer<'_, 'tcx>