Struct rustc_infer::infer::nll_relate::ScopeInstantiator
source · struct ScopeInstantiator<'me, 'tcx> {
next_region: &'me mut dyn FnMut(BoundRegion) -> Region<'tcx>,
target_index: DebruijnIndex,
bound_region_scope: &'me mut BoundRegionScope<'tcx>,
}
Expand description
When we encounter a binder like for<..> fn(..)
, we actually have
to walk the fn
value to find all the values bound by the for
(these are not explicitly present in the ty representation right
now). This visitor handles that: it descends the type, tracking
binder depth, and finds late-bound regions targeting the
for<..
>. For each of those, it creates an entry in
bound_region_scope
.
Fields
next_region: &'me mut dyn FnMut(BoundRegion) -> Region<'tcx>
target_index: DebruijnIndex
bound_region_scope: &'me mut BoundRegionScope<'tcx>
Trait Implementations
sourceimpl<'me, 'tcx> TypeVisitor<'tcx> for ScopeInstantiator<'me, 'tcx>
impl<'me, 'tcx> TypeVisitor<'tcx> for ScopeInstantiator<'me, 'tcx>
fn visit_binder<T: TypeVisitable<'tcx>>(
&mut self,
t: &Binder<'tcx, T>
) -> ControlFlow<Self::BreakTy>
fn visit_region(&mut self, r: Region<'tcx>) -> ControlFlow<Self::BreakTy>
type BreakTy = !
fn visit_ty(&mut self, t: Ty<'tcx>) -> ControlFlow<Self::BreakTy, ()>
fn visit_const(&mut self, c: Const<'tcx>) -> ControlFlow<Self::BreakTy, ()>
fn visit_unevaluated(
&mut self,
uv: Unevaluated<'tcx, Option<Promoted>>
) -> ControlFlow<Self::BreakTy, ()>
fn visit_predicate(
&mut self,
p: Predicate<'tcx>
) -> ControlFlow<Self::BreakTy, ()>
fn visit_mir_const(
&mut self,
c: ConstantKind<'tcx>
) -> ControlFlow<Self::BreakTy, ()>
Auto Trait Implementations
impl<'me, 'tcx> !RefUnwindSafe for ScopeInstantiator<'me, 'tcx>
impl<'me, 'tcx> !Send for ScopeInstantiator<'me, 'tcx>
impl<'me, 'tcx> !Sync for ScopeInstantiator<'me, 'tcx>
impl<'me, 'tcx> Unpin for ScopeInstantiator<'me, 'tcx>where
'tcx: 'me,
impl<'me, 'tcx> !UnwindSafe for ScopeInstantiator<'me, 'tcx>
Blanket Implementations
sourceimpl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
impl<'a, T> Captures<'a> for Twhere
T: ?Sized,
Layout
Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...)
attributes. Please see the Rust Reference’s “Type Layout” chapter for details on type layout guarantees.
Size: 32 bytes