rustc_trait_selection::traits

Function with_replaced_escaping_bound_vars

Source
pub fn with_replaced_escaping_bound_vars<'a, 'tcx, T: TypeFoldable<TyCtxt<'tcx>>, R: TypeFoldable<TyCtxt<'tcx>>>(
    infcx: &'a InferCtxt<'tcx>,
    universe_indices: &'a mut Vec<Option<UniverseIndex>>,
    value: T,
    f: impl FnOnce(T) -> R,
) -> R
Expand description

Executes f on value after replacing all escaping bound variables with placeholders and then replaces these placeholders with the original bound variables in the result.

In most places, bound variables should be replaced right when entering a binder, making this function unnecessary. However, normalization currently does not do that, so we have to do this lazily.

You should not add any additional uses of this function, at least not without first discussing it with t-types.

FIXME(@lcnr): We may even consider experimenting with eagerly replacing bound vars during normalization as well, at which point this function will be unnecessary and can be removed.