flux_middle::rty::fold

Trait TypeFoldable

Source
pub trait TypeFoldable: TypeVisitable {
    // Required method
    fn try_fold_with<F: FallibleTypeFolder>(
        &self,
        folder: &mut F,
    ) -> Result<Self, F::Error>;

    // Provided methods
    fn fold_with<F: TypeFolder>(&self, folder: &mut F) -> Self { ... }
    fn normalize_projections<'tcx>(
        &self,
        genv: GlobalEnv<'_, 'tcx>,
        infcx: &InferCtxt<'tcx>,
        callsite_def_id: DefId,
    ) -> QueryResult<Self> { ... }
    fn normalize(&self, defns: &SpecFuncDefns) -> Self { ... }
    fn replace_holes(
        &self,
        f: impl FnMut(&[BoundVariableKinds], HoleKind) -> Expr,
    ) -> Self { ... }
    fn with_holes(&self) -> Self { ... }
    fn replace_evars(&self, evars: &EVarSol) -> Self { ... }
    fn shift_in_escaping(&self, amount: u32) -> Self { ... }
    fn shift_out_escaping(&self, amount: u32) -> Self { ... }
    fn erase_regions(&self) -> Self { ... }
}

Required Methods§

Source

fn try_fold_with<F: FallibleTypeFolder>( &self, folder: &mut F, ) -> Result<Self, F::Error>

Provided Methods§

Source

fn fold_with<F: TypeFolder>(&self, folder: &mut F) -> Self

Source

fn normalize_projections<'tcx>( &self, genv: GlobalEnv<'_, 'tcx>, infcx: &InferCtxt<'tcx>, callsite_def_id: DefId, ) -> QueryResult<Self>

Source

fn normalize(&self, defns: &SpecFuncDefns) -> Self

Normalize expressions by applying beta reductions for tuples and lambda abstractions.

Source

fn replace_holes( &self, f: impl FnMut(&[BoundVariableKinds], HoleKind) -> Expr, ) -> Self

Replaces all holes with the result of calling a closure. The closure takes a list with all the layers of bound variables at the point the hole was found. Each layer corresponds to the list of bound variables at that level. The list is ordered from outermost to innermost binder, i.e., the last element is the binder closest to the hole.

Source

fn with_holes(&self) -> Self

Remove all refinements and turn each underlying BaseTy into a TyKind::Exists with a TyKind::Constr and a hole. For example, Vec<{v. i32[v] | v > 0}>[n] becomes {n. Vec<{v. i32[v] | *}>[n] | *}.

Source

fn replace_evars(&self, evars: &EVarSol) -> Self

Source

fn shift_in_escaping(&self, amount: u32) -> Self

Source

fn shift_out_escaping(&self, amount: u32) -> Self

Source

fn erase_regions(&self) -> Self

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 TypeFoldable for bool

Source§

fn try_fold_with<F: FallibleTypeFolder>( &self, _: &mut F, ) -> Result<Self, F::Error>

Source§

fn fold_with<F: TypeFolder>(&self, _: &mut F) -> Self

Source§

impl TypeFoldable for usize

Source§

fn try_fold_with<F: FallibleTypeFolder>( &self, _: &mut F, ) -> Result<Self, F::Error>

Source§

fn fold_with<F: TypeFolder>(&self, _: &mut F) -> Self

Source§

impl TypeFoldable for DefId

Source§

fn try_fold_with<F: FallibleTypeFolder>( &self, _: &mut F, ) -> Result<Self, F::Error>

Source§

fn fold_with<F: TypeFolder>(&self, _: &mut F) -> Self

Source§

impl TypeFoldable for Abi

Source§

fn try_fold_with<F: FallibleTypeFolder>( &self, _: &mut F, ) -> Result<Self, F::Error>

Source§

fn fold_with<F: TypeFolder>(&self, _: &mut F) -> Self

Source§

impl TypeFoldable for Safety

Source§

fn try_fold_with<F: FallibleTypeFolder>( &self, _: &mut F, ) -> Result<Self, F::Error>

Source§

fn fold_with<F: TypeFolder>(&self, _: &mut F) -> Self

Implementors§

Source§

impl TypeFoldable for InferMode

Source§

impl TypeFoldable for BoundReftKind

Source§

impl TypeFoldable for BoundVariableKind

Source§

impl TypeFoldable for BaseTy

Source§

impl TypeFoldable for BoundRegionKind

Source§

impl TypeFoldable for BvSize

Source§

impl TypeFoldable for ClauseKind

Source§

impl TypeFoldable for ClosureKind

Source§

impl TypeFoldable for Ensures

Source§

impl TypeFoldable for ExistentialPredicate

Source§

impl TypeFoldable for GenericArg

Source§

impl TypeFoldable for Region

Source§

impl TypeFoldable for Sort

Source§

impl TypeFoldable for SortArg

Source§

impl TypeFoldable for TyOrCtor

Source§

impl TypeFoldable for BinOp

Source§

impl TypeFoldable for HoleKind

Source§

impl TypeFoldable for Symbol

Source§

impl TypeFoldable for CanonicalConstrTy

Source§

impl TypeFoldable for AliasReft

Source§

impl TypeFoldable for Expr

Source§

impl TypeFoldable for KVar

Source§

impl TypeFoldable for KVid

Source§

impl TypeFoldable for Lambda

Source§

impl TypeFoldable for AliasTy

Source§

impl TypeFoldable for Clause

Source§

impl TypeFoldable for Const

Source§

impl TypeFoldable for CoroutineObligPredicate

Source§

impl TypeFoldable for ExistentialProjection

Source§

impl TypeFoldable for ExistentialTraitRef

Source§

impl TypeFoldable for FnOutput

Source§

impl TypeFoldable for FnSig

Source§

impl TypeFoldable for FnTraitPredicate

Source§

impl TypeFoldable for FuncSort

Source§

impl TypeFoldable for Invariant

Source§

impl TypeFoldable for PolyFuncSort

Source§

impl TypeFoldable for ProjectionPredicate

Source§

impl TypeFoldable for Qualifier

Source§

impl TypeFoldable for SubsetTy

Source§

impl TypeFoldable for TraitPredicate

Source§

impl TypeFoldable for TraitRef

Source§

impl TypeFoldable for Ty

Source§

impl TypeFoldable for VariantSig

Source§

impl<T> TypeFoldable for Opaqueness<T>
where T: TypeFoldable,

Source§

impl<T> TypeFoldable for Binder<T>
where T: TypeFoldable,

Source§

impl<T> TypeFoldable for List<T>

Source§

impl<T: TypeFoldable> TypeFoldable for OutlivesPredicate<T>