pub struct Subst<'s, I: Interner> {
    parameters: &'s [GenericArg<I>],
    interner: I,
}
Expand description

Substitution used during folding

Fields

parameters: &'s [GenericArg<I>]

Values to substitute. A reference to a free variable with index i will be mapped to parameters[i] – if i > parameters.len(), then we will leave the variable untouched.

interner: I

Implementations

Applies the substitution by folding

Trait Implementations

We are eliminating one binder, but binders outside of that get preserved.

So e.g. consider this:

for<A, B> { for<C> { [A, C] } }
//          ^ the binder we are substituing with `[u32]`

Here, A would be ^1.0 and C would be ^0.0. We will replace ^0.0 with the 0th index from the list (u32). We will convert ^1.0 (A) to ^0.0 – i.e., shift it out of one level of binder (the for<C> binder we are eliminating).

This gives us as a result:

for<A, B> { [A, u32] }
             ^ represented as `^0.0`

see fold_free_var_ty

see fold_free_var_ty

The type this folder returns when folding fails. This is commonly NoSolution. Read more

Creates a dyn value from this folder. Unfortunately, this must be added manually to each impl of TypeFolder; it permits the default implements below to create a &mut dyn TypeFolder from Self without knowing what Self is (by invoking this method). Effectively, this limits impls of TypeFolder to types for which we are able to create a dyn value (i.e., not [T] types). Read more

Gets the interner that is being folded from.

Top-level callback: invoked for each Ty<I> that is encountered when folding. By default, invokes super_fold_with, which will in turn invoke the more specialized folding methods below, like fold_free_var_ty. Read more

Top-level callback: invoked for each Lifetime<I> that is encountered when folding. By default, invokes super_fold_with, which will in turn invoke the more specialized folding methods below, like fold_free_var_lifetime. Read more

Top-level callback: invoked for each Const<I> that is encountered when folding. By default, invokes super_fold_with, which will in turn invoke the more specialized folding methods below, like fold_free_var_const. Read more

Invoked for every program clause. By default, recursively folds the goals contents.

Invoked for every goal. By default, recursively folds the goals contents.

If overridden to return true, then folding will panic if a free variable is encountered. This should be done if free type/lifetime variables are not expected. Read more

If overridden to return true, we will panic when a free placeholder type/lifetime/const is encountered. Read more

Invoked for each occurrence of a placeholder type; these are used when we instantiate binders universally. Returns a type to use instead, which should be suitably shifted to account for binders. Read more

As with fold_free_placeholder_ty, but for lifetimes.

As with fold_free_placeholder_ty, but for constants.

If overridden to return true, inference variables will trigger panics when folded. Used when inference variables are unexpected. Read more

Invoked for each occurrence of a inference type; these are used when we instantiate binders universally. Returns a type to use instead, which should be suitably shifted to account for binders. Read more

As with fold_inference_ty, but for lifetimes.

As with fold_inference_ty, but for constants.

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

Cast a value to type U using CastTo.

Returns the argument unchanged.

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

The type returned in the event of a conversion error.

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.