pub struct RegionBinder<T> {
pub regions: Vector<RegionId, RegionParam>,
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.
TODO: merge with binder
Fields§
§regions: Vector<RegionId, RegionParam>§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<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.
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>
Sourcepub fn apply(self, regions: Vector<RegionId, Region>) -> Twhere
T: AstVisitable,
pub fn apply(self, regions: Vector<RegionId, Region>) -> Twhere
T: AstVisitable,
Substitute the bound variables with the given lifetimes.
Sourcepub fn erase(self) -> Twhere
T: AstVisitable,
pub fn erase(self) -> Twhere
T: AstVisitable,
Substitute the bound variables with erased lifetimes.
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>
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>
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 dyn_visit<T: AstVisitable>(&self, f: impl FnMut(&T))
fn dyn_visit<T: AstVisitable>(&self, f: impl FnMut(&T))
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))
fn dyn_visit_mut<T: AstVisitable>(&mut self, f: impl FnMut(&mut T))
Visit all occurrences of that type inside
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>
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl<T: Debug> Debug for RegionBinder<T>
impl<T: Debug> Debug for RegionBinder<T>
Source§impl<'de, T> Deserialize<'de> for RegionBinder<T>where
T: Deserialize<'de>,
impl<'de, T> Deserialize<'de> for RegionBinder<T>where
T: Deserialize<'de>,
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer. Read more
Source§impl<'s, T, V> Drive<'s, V> for RegionBinder<T>
impl<'s, T, V> Drive<'s, V> for RegionBinder<T>
Source§fn drive_inner(&'s self, visitor: &mut V) -> ControlFlow<V::Break>
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>
impl<'s, T, V> DriveMut<'s, V> for RegionBinder<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>
Call
v.visit() on the immediate contents of self.Source§impl<C: AstFormatter> FmtWithCtx<C> for RegionBinder<(Vec<Ty>, Ty)>
impl<C: AstFormatter> FmtWithCtx<C> for RegionBinder<(Vec<Ty>, Ty)>
Source§impl<T: Hash> Hash for RegionBinder<T>
impl<T: Hash> Hash for RegionBinder<T>
Source§impl<T: PartialEq> PartialEq for RegionBinder<T>
impl<T: PartialEq> PartialEq for RegionBinder<T>
Source§impl<T> Serialize for RegionBinder<T>where
T: Serialize,
impl<T> Serialize for RegionBinder<T>where
T: Serialize,
impl<T: Eq> Eq for RegionBinder<T>
impl<T> 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> 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
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§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
Checks if this value is equivalent to the given key. Read more
§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
Compare self to
key and return true if they are equal.§impl<I, T> ExtractContext<I, ()> for T
impl<I, T> ExtractContext<I, ()> for T
§fn extract_context(self, _original_input: I)
fn extract_context(self, _original_input: I)
Given the context attached to a nom error, and given the original
input to the nom parser, extract more the useful context information. Read more
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> 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>
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 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>
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§impl<I> RecreateContext<I> for I
impl<I> RecreateContext<I> for I
§fn recreate_context(_original_input: I, tail: I) -> I
fn recreate_context(_original_input: I, tail: I) -> I
Given the original input, as well as the context reported by nom,
recreate a context in the original string where the error occurred. Read more
Source§impl<T> TyVisitable for Twhere
T: AstVisitable,
impl<T> TyVisitable for Twhere
T: AstVisitable,
Source§fn visit_vars(&mut self, v: &mut impl VarsVisitor)
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
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 most likely want to use
substitute_with_self.Source§fn substitute_explicits(self, generics: &GenericArgs) -> Self
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
fn substitute_with_self( self, generics: &GenericArgs, self_ref: &TraitRefKind, ) -> Self
Substitute the generic variables as well as the
TraitRefKind::Self trait ref.Source§fn move_under_binder(self) -> Self
fn move_under_binder(self) -> Self
Move under one binder.
Source§fn move_under_binders(self, depth: DeBruijnId) -> Self
fn move_under_binders(self, depth: DeBruijnId) -> Self
Move under
depth binders.Source§fn move_from_under_binder(self) -> Option<Self>
fn move_from_under_binder(self) -> Option<Self>
Move from under one binder.
Source§fn move_from_under_binders(self, depth: DeBruijnId) -> Option<Self>
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>
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.