Skip to main content

RegionBinder

Struct RegionBinder 

Source
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: T

Named this way to highlight accesses to the inner value that might be handling parameters incorrectly. Prefer using helper methods.

Implementations§

Source§

impl RegionBinder<FunSig>

Source

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>

Source

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>

Source

pub fn empty(x: T) -> Self
where T: TyVisitable,

Wrap the value in an empty region binder, shifting variables appropriately.

Source

pub fn to_params(&self) -> GenericParams

The parameters and predicates introduced by this binder.

Source

pub fn map<U>(self, f: impl FnOnce(T) -> U) -> RegionBinder<U>

Source

pub fn map_ref<U>(&self, f: impl FnOnce(&T) -> U) -> RegionBinder<U>

Source

pub fn map_ref_opt<U>( &self, f: impl FnOnce(&T) -> Option<U>, ) -> Option<RegionBinder<U>>

Source

pub fn apply(self, args: RegionArgs) -> T
where T: TyVisitable,

Substitute the bound variables with the given lifetimes.

Source

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.

Source

pub fn no_bound_vars(self) -> T
where T: TyVisitable,

Extract the contents when we now the binder binds nothing.

Source

pub fn erase(self) -> T
where T: TyVisitable,

Substitute the bound variables with erased lifetimes.

Source§

impl RegionBinder<TraitDeclRef>

Source

fn format_as_pred<'a, C: AstFormatter + 'a>( &'a self, ctx: &'a C, ) -> impl Display + 'a

Source§

impl<T> RegionBinder<T>

Source

fn fmt_params_with_ctx<C: AstFormatter>(&self, ctx: &C) -> String

Source

fn fmt_split<'a, C>(&'a self, ctx: &'a C) -> (String, String)
where C: AstFormatter, T: FmtWithCtx<C::Reborrow<'a>>,

Format the parameters and contents of this binder and returns the resulting strings.

Source

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.

Source

fn fmt_as_for<'a, C>(&'a self, ctx: &'a C) -> String
where C: AstFormatter, T: FmtWithCtx<C::Reborrow<'a>>,

Formats the binder as for<params> value.

Source

fn fmt_as_for_with<'a, C>( &'a self, ctx: &'a C, fmt_inner: impl FnOnce(&C::Reborrow<'a>, &T) -> String, ) -> String
where C: AstFormatter, T: FmtWithCtx<C::Reborrow<'a>>,

Formats the binder as for<params> value.

Trait Implementations§

Source§

impl<T: AstVisitable> AstVisitable for RegionBinder<T>

Source§

fn drive<V: VisitAst>(&self, v: &mut V) -> ControlFlow<V::Break>

Recursively visit this type with the provided visitor. This calls the visitor’s visit_$any method if it exists, otherwise visit_inner.
Source§

fn drive_mut<V: VisitAstMut>(&mut self, v: &mut V) -> ControlFlow<V::Break>

Recursively visit this type with the provided visitor. This calls the visitor’s visit_$any method if it exists, otherwise visit_inner.
Source§

fn drive_two<V: ZipAst>(&self, other: &Self, v: &mut V) -> ControlFlow<V::Break>

Recursively visit this type with the provided visitor. This calls the visitor’s visit_$any method if it exists, otherwise visit_inner.
Source§

fn name(&self) -> &'static str

The name of the type, used for debug logging.
Source§

fn dyn_visit<T: AstVisitable>(&self, f: impl FnMut(&T))
where Self: Sized,

Visit all occurrences of that type inside self, in pre-order traversal.
Source§

fn dyn_visit_mut<T: AstVisitable>(&mut self, f: impl FnMut(&mut T))
where Self: Sized,

Visit all occurrences of that type inside self, in pre-order traversal.
Source§

impl<T: Clone> Clone for RegionBinder<T>

Source§

fn clone(&self) -> RegionBinder<T>

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<T: Debug> Debug for RegionBinder<T>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de, T, __State: ?Sized + DedupSerializerState> DeserializeState<'de, __State> for RegionBinder<T>
where T: DeserializeState<'de, __State>,

Source§

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>,

Source§

fn drive_inner(&'s self, visitor: &mut V) -> ControlFlow<V::Break>

Call 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>,

Source§

fn drive_inner_mut(&'s mut self, visitor: &mut V) -> ControlFlow<V::Break>

Call 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>,

Source§

fn drive_two_inner( &'s self, other: &'s Self, visitor: &mut V, ) -> ControlFlow<V::Break>

Call 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()).
Source§

impl<T: Eq> Eq for RegionBinder<T>

Source§

impl<C: AstFormatter> FmtWithCtx<C> for RegionBinder<FunSig>

Source§

fn fmt_with_ctx(&self, ctx: &C, f: &mut Formatter<'_>) -> Result

Source§

fn with_ctx<'a>(&'a self, ctx: &'a C) -> WithCtx<'a, C, Self>

Returns a struct that implements Display. This allows the following: Read more
Source§

fn to_string_with_ctx(&self, ctx: &C) -> String

Source§

impl<T: HasSafety> HasSafety for RegionBinder<T>

Source§

fn safety(&self, krate: &TranslatedCrate) -> Safety

Source§

impl<T: Hash> Hash for RegionBinder<T>

Source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl<T: Ord> Ord for RegionBinder<T>

Source§

fn cmp(&self, other: &RegionBinder<T>) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 (const: unstable) · Source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 (const: unstable) · Source§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 (const: unstable) · Source§

fn clamp(self, min: Self, max: Self) -> Self
where Self: Sized,

Restrict a value to a certain interval. Read more
Source§

fn clamp_to<R>(self, range: R) -> Self
where Self: Sized, R: ClampBounds<Self>,

🔬This is a nightly-only experimental API. (clamp_to)
Restrict a value to a certain range. Read more
Source§

impl<T: PartialEq> PartialEq for RegionBinder<T>

Source§

fn eq(&self, other: &RegionBinder<T>) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl<T: PartialOrd> PartialOrd for RegionBinder<T>

Source§

fn partial_cmp(&self, other: &RegionBinder<T>) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 (const: unstable) · Source§

fn lt(&self, other: &Rhs) -> bool

Tests less than (for self and other) and is used by the < operator. Read more
1.0.0 (const: unstable) · Source§

fn le(&self, other: &Rhs) -> bool

Tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 (const: unstable) · Source§

fn gt(&self, other: &Rhs) -> bool

Tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 (const: unstable) · Source§

fn ge(&self, other: &Rhs) -> bool

Tests greater than or equal to (for self and other) and is used by the >= operator. Read more
Source§

impl<T, __State: ?Sized + DedupSerializerState> SerializeState<__State> for RegionBinder<T>
where T: SerializeState<__State>,

Source§

fn serialize_state<__S>( &self, __state: &__State, __serializer: __S, ) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Source§

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> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
§

impl<Q, K> Comparable<K> for Q
where Q: Ord + ?Sized, K: Borrow<Q> + ?Sized,

§

fn compare(&self, key: &K) -> Ordering

Compare self to key and return their ordering.
Source§

impl<T> Dedup for T
where T: Mappable + Clone + Eq + Hash,

§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> HashConsable for T
where T: Hash + PartialEq + Eq + Clone + Mappable,

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

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

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
where F: FnOnce(&Self) -> bool,

Converts 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 more
Source§

impl<T> Mappable for T
where T: Any + Send + Sync,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> TyVisitable for T
where T: AstVisitable,

Source§

fn type_info(&self) -> TypeInfo

Compute various bits of information about the contents of this value. See methods on TypeInfo.
Source§

fn visit_vars(&mut self, v: &mut impl VarsVisitor)

Visit the variables contained in 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

Substitute the generic variables inside 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

Substitute the generic variables inside self by replacing them with the provided values. This is appropriate when substituting an inner binder.
Source§

fn substitute_explicits(self, generics: &GenericArgs) -> Self

Substitute only the type, region and const generic args.
Source§

fn substitute_with_self( self, generics: &GenericArgs, self_ref: &TraitRefKind, ) -> Self

Substitute the generic variables as well as the TraitRefKind::SelfId trait ref.
Source§

fn substitute_with_tref(self, tref: &TraitRef) -> Self

Substitute the generic variables as well as the TraitRefKind::SelfId trait ref.
Source§

fn try_substitute_with_tref( self, tref: &TraitRef, ) -> Result<Self, GenericsMismatch>

Substitute the generic variables as well as the TraitRefKind::SelfId trait ref.
Source§

fn try_substitute( self, generics: &GenericArgs, ) -> Result<Self, GenericsMismatch>

Source§

fn try_substitute_with_self( self, generics: &GenericArgs, self_ref: &TraitRefKind, ) -> Result<Self, GenericsMismatch>

Source§

fn move_under_binder(self) -> Self

Move under one binder.
Source§

fn move_under_binders(self, depth: DeBruijnId) -> Self

Move under depth binders.
Source§

fn move_from_under_binder(self) -> Option<Self>

Move from under one binder.
Source§

fn move_from_under_binders(self, depth: DeBruijnId) -> Option<Self>

Move the value out of 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>

Visit the de Bruijn ids contained in 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

Whether this value mentions any region var of its environment.
Source§

fn collect_regions(&self) -> SeqHashSet<Region>

Collect the regions contained in self.
Source§

fn replace_regions(self, f: impl FnMut() -> Region) -> Self

Replace all the regions by the output of the provided function. Binders levels are handled automatically.
Source§

fn replace_erased_regions(self, f: impl FnMut() -> Region) -> Self

Replace all the erased regions by the output of the provided function. Binders levels are handled automatically.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more