pub struct RegionBinder<T> {
pub regions: IndexVec<RegionId, RegionParam>,
pub regions_outlive: Vec<PolyRegionOutlives>,
pub types_outlive: Vec<PolyTypeOutlives>,
pub skip_binder: T,
}Expand description
A value of type T bound by regions. We should use binder instead but this causes name clash
issues in the derived ocaml visitors.
Fields§
§regions: IndexVec<RegionId, RegionParam>§regions_outlive: Vec<PolyRegionOutlives>Outlives relations involving the bound regions.
types_outlive: Vec<PolyTypeOutlives>Outlives relations involving the bound regions.
skip_binder: TNamed this way to highlight accesses to the inner value that might be handling parameters incorrectly. Prefer using helper methods.
Implementations§
Source§impl RegionBinder<FunSig>
impl RegionBinder<FunSig>
Sourcepub fn infer_region_mapping(
&self,
target: &Self,
) -> Option<RegionBinder<RegionArgs>>
pub fn infer_region_mapping( &self, target: &Self, ) -> Option<RegionBinder<RegionArgs>>
Infer how the bound regions of self appear in target. The returned binder binds the
same regions as target; other lifetimes may differ.
Source§impl RegionBinder<TraitDeclRef>
impl RegionBinder<TraitDeclRef>
Sourcepub fn identity_region_args(&self) -> RegionArgs
pub fn identity_region_args(&self) -> RegionArgs
The region arguments at depth 0 corresponding to this tref’s bound regions.
Source§impl<T> RegionBinder<T>
impl<T> RegionBinder<T>
Sourcepub fn empty(x: T) -> Selfwhere
T: TyVisitable,
pub fn empty(x: T) -> Selfwhere
T: TyVisitable,
Wrap the value in an empty region binder, shifting variables appropriately.
Sourcepub fn to_params(&self) -> GenericParams
pub fn to_params(&self) -> GenericParams
The parameters and predicates introduced by this binder.
pub fn map<U>(self, f: impl FnOnce(T) -> U) -> RegionBinder<U>
pub fn map_ref<U>(&self, f: impl FnOnce(&T) -> U) -> RegionBinder<U>
pub fn map_ref_opt<U>( &self, f: impl FnOnce(&T) -> Option<U>, ) -> Option<RegionBinder<U>>
Sourcepub fn apply(self, args: RegionArgs) -> Twhere
T: TyVisitable,
pub fn apply(self, args: RegionArgs) -> Twhere
T: TyVisitable,
Substitute the bound variables with the given lifetimes.
Sourcepub fn apply_keep_params(
self,
args: RegionArgs,
) -> (T, Vec<PolyRegionOutlives>, Vec<PolyTypeOutlives>)where
T: TyVisitable,
pub fn apply_keep_params(
self,
args: RegionArgs,
) -> (T, Vec<PolyRegionOutlives>, Vec<PolyTypeOutlives>)where
T: TyVisitable,
Like apply, but also keep the predicates: they mention the bound regions and therefore
need to be substituted before use too.
Sourcepub fn no_bound_vars(self) -> Twhere
T: TyVisitable,
pub fn no_bound_vars(self) -> Twhere
T: TyVisitable,
Extract the contents when we now the binder binds nothing.
Sourcepub fn erase(self) -> Twhere
T: TyVisitable,
pub fn erase(self) -> Twhere
T: TyVisitable,
Substitute the bound variables with erased lifetimes.
Source§impl RegionBinder<TraitDeclRef>
impl RegionBinder<TraitDeclRef>
fn format_as_pred<'a, C: AstFormatter + 'a>( &'a self, ctx: &'a C, ) -> impl Display + 'a
Source§impl<T> RegionBinder<T>
impl<T> RegionBinder<T>
fn fmt_params_with_ctx<C: AstFormatter>(&self, ctx: &C) -> String
Sourcefn fmt_split<'a, C>(&'a self, ctx: &'a C) -> (String, String)
fn fmt_split<'a, C>(&'a self, ctx: &'a C) -> (String, String)
Format the parameters and contents of this binder and returns the resulting strings.
Sourcefn fmt_split_with<'a, C>(
&'a self,
ctx: &'a C,
fmt_inner: impl FnOnce(&C::Reborrow<'a>, &T) -> String,
) -> (String, String)where
C: AstFormatter,
fn fmt_split_with<'a, C>(
&'a self,
ctx: &'a C,
fmt_inner: impl FnOnce(&C::Reborrow<'a>, &T) -> String,
) -> (String, String)where
C: AstFormatter,
Format the parameters and contents of this binder and returns the resulting strings.
Sourcefn fmt_as_for<'a, C>(&'a self, ctx: &'a C) -> String
fn fmt_as_for<'a, C>(&'a self, ctx: &'a C) -> String
Formats the binder as for<params> value.
Trait Implementations§
Source§impl<T: AstVisitable> AstVisitable for RegionBinder<T>
impl<T: AstVisitable> AstVisitable for RegionBinder<T>
Source§fn drive<V: VisitAst>(&self, v: &mut V) -> ControlFlow<V::Break>
fn drive<V: VisitAst>(&self, v: &mut V) -> ControlFlow<V::Break>
visit_$any
method if it exists, otherwise visit_inner.Source§fn drive_mut<V: VisitAstMut>(&mut self, v: &mut V) -> ControlFlow<V::Break>
fn drive_mut<V: VisitAstMut>(&mut self, v: &mut V) -> ControlFlow<V::Break>
visit_$any
method if it exists, otherwise visit_inner.Source§fn drive_two<V: ZipAst>(&self, other: &Self, v: &mut V) -> ControlFlow<V::Break>
fn drive_two<V: ZipAst>(&self, other: &Self, v: &mut V) -> ControlFlow<V::Break>
visit_$any
method if it exists, otherwise visit_inner.Source§fn dyn_visit<T: AstVisitable>(&self, f: impl FnMut(&T))where
Self: Sized,
fn dyn_visit<T: AstVisitable>(&self, f: impl FnMut(&T))where
Self: Sized,
self, in pre-order traversal.Source§fn dyn_visit_mut<T: AstVisitable>(&mut self, f: impl FnMut(&mut T))where
Self: Sized,
fn dyn_visit_mut<T: AstVisitable>(&mut self, f: impl FnMut(&mut T))where
Self: Sized,
self, in pre-order traversal.Source§impl<T: Clone> Clone for RegionBinder<T>
impl<T: Clone> Clone for RegionBinder<T>
Source§fn clone(&self) -> RegionBinder<T>
fn clone(&self) -> RegionBinder<T>
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl<T: Debug> Debug for RegionBinder<T>
impl<T: Debug> Debug for RegionBinder<T>
Source§impl<'de, T, __State: ?Sized + DedupSerializerState> DeserializeState<'de, __State> for RegionBinder<T>where
T: DeserializeState<'de, __State>,
impl<'de, T, __State: ?Sized + DedupSerializerState> DeserializeState<'de, __State> for RegionBinder<T>where
T: DeserializeState<'de, __State>,
fn deserialize_state<__D>(
__state: &__State,
__deserializer: __D,
) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Source§impl<'s, T, V> Drive<'s, V> for RegionBinder<T>where
V: Visitor + Visit<'s, IndexVec<RegionId, RegionParam>> + Visit<'s, Vec<PolyRegionOutlives>> + Visit<'s, Vec<PolyTypeOutlives>> + Visit<'s, T>,
impl<'s, T, V> Drive<'s, V> for RegionBinder<T>where
V: Visitor + Visit<'s, IndexVec<RegionId, RegionParam>> + Visit<'s, Vec<PolyRegionOutlives>> + Visit<'s, Vec<PolyTypeOutlives>> + Visit<'s, T>,
Source§fn drive_inner(&'s self, visitor: &mut V) -> ControlFlow<V::Break>
fn drive_inner(&'s self, visitor: &mut V) -> ControlFlow<V::Break>
v.visit() on the immediate contents of self.Source§impl<'s, T, V> DriveMut<'s, V> for RegionBinder<T>where
V: Visitor + VisitMut<'s, IndexVec<RegionId, RegionParam>> + VisitMut<'s, Vec<PolyRegionOutlives>> + VisitMut<'s, Vec<PolyTypeOutlives>> + VisitMut<'s, T>,
impl<'s, T, V> DriveMut<'s, V> for RegionBinder<T>where
V: Visitor + VisitMut<'s, IndexVec<RegionId, RegionParam>> + VisitMut<'s, Vec<PolyRegionOutlives>> + VisitMut<'s, Vec<PolyTypeOutlives>> + VisitMut<'s, T>,
Source§fn drive_inner_mut(&'s mut self, visitor: &mut V) -> ControlFlow<V::Break>
fn drive_inner_mut(&'s mut self, visitor: &mut V) -> ControlFlow<V::Break>
v.visit() on the immediate contents of self.Source§impl<'s, T, V> DriveTwo<'s, V> for RegionBinder<T>where
V: Visitor<Break: Default> + VisitTwo<'s, IndexVec<RegionId, RegionParam>> + VisitTwo<'s, Vec<PolyRegionOutlives>> + VisitTwo<'s, Vec<PolyTypeOutlives>> + VisitTwo<'s, T>,
impl<'s, T, V> DriveTwo<'s, V> for RegionBinder<T>where
V: Visitor<Break: Default> + VisitTwo<'s, IndexVec<RegionId, RegionParam>> + VisitTwo<'s, Vec<PolyRegionOutlives>> + VisitTwo<'s, Vec<PolyTypeOutlives>> + VisitTwo<'s, T>,
Source§fn drive_two_inner(
&'s self,
other: &'s Self,
visitor: &mut V,
) -> ControlFlow<V::Break>
fn drive_two_inner( &'s self, other: &'s Self, visitor: &mut V, ) -> ControlFlow<V::Break>
v.visit() on the immediate contents of self and other, if they correspond. If
the values don’t match up, this returns Break(Default::default()).impl<T: Eq> Eq for RegionBinder<T>
Source§impl<C: AstFormatter> FmtWithCtx<C> for RegionBinder<FunSig>
impl<C: AstFormatter> FmtWithCtx<C> for RegionBinder<FunSig>
Source§impl<T: HasSafety> HasSafety for RegionBinder<T>
impl<T: HasSafety> HasSafety for RegionBinder<T>
fn safety(&self, krate: &TranslatedCrate) -> Safety
Source§impl<T: Hash> Hash for RegionBinder<T>
impl<T: Hash> Hash for RegionBinder<T>
Source§impl<T: Ord> Ord for RegionBinder<T>
impl<T: Ord> Ord for RegionBinder<T>
Source§fn cmp(&self, other: &RegionBinder<T>) -> Ordering
fn cmp(&self, other: &RegionBinder<T>) -> Ordering
1.21.0 (const: unstable) · Source§fn max(self, other: Self) -> Selfwhere
Self: Sized,
fn max(self, other: Self) -> Selfwhere
Self: Sized,
1.21.0 (const: unstable) · Source§fn min(self, other: Self) -> Selfwhere
Self: Sized,
fn min(self, other: Self) -> Selfwhere
Self: Sized,
Source§impl<T: PartialEq> PartialEq for RegionBinder<T>
impl<T: PartialEq> PartialEq for RegionBinder<T>
Source§impl<T: PartialOrd> PartialOrd for RegionBinder<T>
impl<T: PartialOrd> PartialOrd for RegionBinder<T>
Source§impl<T, __State: ?Sized + DedupSerializerState> SerializeState<__State> for RegionBinder<T>where
T: SerializeState<__State>,
impl<T, __State: ?Sized + DedupSerializerState> SerializeState<__State> for RegionBinder<T>where
T: SerializeState<__State>,
fn serialize_state<__S>(
&self,
__state: &__State,
__serializer: __S,
) -> Result<__S::Ok, __S::Error>where
__S: Serializer,
impl<T: PartialEq> StructuralPartialEq for RegionBinder<T>
Auto Trait Implementations§
impl<T> Freeze for RegionBinder<T>where
T: Freeze,
impl<T> RefUnwindSafe for RegionBinder<T>where
T: RefUnwindSafe,
impl<T> Send for RegionBinder<T>where
T: Send,
impl<T> Sync for RegionBinder<T>where
T: Sync,
impl<T> Unpin for RegionBinder<T>where
T: Unpin,
impl<T> UnsafeUnpin for RegionBinder<T>where
T: UnsafeUnpin,
impl<T> UnwindSafe for RegionBinder<T>where
T: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<Q, K> Comparable<K> for Q
impl<Q, K> Comparable<K> for Q
impl<T> Dedup for T
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.impl<T> HashConsable for T
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreimpl<T> Mappable for T
Source§impl<T> TyVisitable for Twhere
T: AstVisitable,
impl<T> TyVisitable for Twhere
T: AstVisitable,
Source§fn type_info(&self) -> TypeInfo
fn type_info(&self) -> TypeInfo
TypeInfo.Source§fn visit_vars(&mut self, v: &mut impl VarsVisitor)
fn visit_vars(&mut self, v: &mut impl VarsVisitor)
self, as seen from the outside of self. This means
that any variable bound inside self will be skipped, and all the seen De Bruijn indices
will count from the outside of self.Source§fn substitute(self, generics: &GenericArgs) -> Self
fn substitute(self, generics: &GenericArgs) -> Self
self by replacing them with the provided values.
Note: if self is an item that comes from a TraitDecl, you must use
substitute_with_self or substitute_inner_binder, otherwise you’ll get panics.Source§fn substitute_inner_binder(self, generics: &GenericArgs) -> Self
fn substitute_inner_binder(self, generics: &GenericArgs) -> Self
self by replacing them with the provided values.
This is appropriate when substituting an inner binder.Source§fn substitute_explicits(self, generics: &GenericArgs) -> Self
fn substitute_explicits(self, generics: &GenericArgs) -> Self
Source§fn substitute_with_self(
self,
generics: &GenericArgs,
self_ref: &TraitRefKind,
) -> Self
fn substitute_with_self( self, generics: &GenericArgs, self_ref: &TraitRefKind, ) -> Self
TraitRefKind::SelfId trait ref.Source§fn substitute_with_tref(self, tref: &TraitRef) -> Self
fn substitute_with_tref(self, tref: &TraitRef) -> Self
TraitRefKind::SelfId trait ref.Source§fn try_substitute_with_tref(
self,
tref: &TraitRef,
) -> Result<Self, GenericsMismatch>
fn try_substitute_with_tref( self, tref: &TraitRef, ) -> Result<Self, GenericsMismatch>
TraitRefKind::SelfId trait ref.fn try_substitute( self, generics: &GenericArgs, ) -> Result<Self, GenericsMismatch>
fn try_substitute_with_self( self, generics: &GenericArgs, self_ref: &TraitRefKind, ) -> Result<Self, GenericsMismatch>
Source§fn move_under_binder(self) -> Self
fn move_under_binder(self) -> Self
Source§fn move_under_binders(self, depth: DeBruijnId) -> Self
fn move_under_binders(self, depth: DeBruijnId) -> Self
depth binders.Source§fn move_from_under_binder(self) -> Option<Self>
fn move_from_under_binder(self) -> Option<Self>
Source§fn move_from_under_binders(self, depth: DeBruijnId) -> Option<Self>
fn move_from_under_binders(self, depth: DeBruijnId) -> Option<Self>
depth binders. Returns None if it contains a variable bound in
one of these depth binders.Source§fn visit_db_id<B>(
&mut self,
f: impl FnMut(&mut DeBruijnId) -> ControlFlow<B>,
) -> ControlFlow<B>
fn visit_db_id<B>( &mut self, f: impl FnMut(&mut DeBruijnId) -> ControlFlow<B>, ) -> ControlFlow<B>
self, as seen from the outside of self. This means
that any variable bound inside self will be skipped, and all the seen indices will count
from the outside of self.Source§fn has_escaping_region_var(&self) -> bool
fn has_escaping_region_var(&self) -> bool
Source§fn collect_regions(&self) -> SeqHashSet<Region>
fn collect_regions(&self) -> SeqHashSet<Region>
self.