pub struct BoundVar {
pub debruijn: DebruijnIndex,
pub index: usize,
}
Expand description
Identifies a particular bound variable within a binder.
Variables are identified by the combination of a DebruijnIndex
,
which identifies the binder, and an index within that binder.
Consider this case:
forall<'a, 'b> { forall<'c, 'd> { ... } }
Within the ...
term:
- the variable
'a
have a debruijn index of 1 and index 0 - the variable
'b
have a debruijn index of 1 and index 1 - the variable
'c
have a debruijn index of 0 and index 0 - the variable
'd
have a debruijn index of 0 and index 1
The variables 'a
and 'b
both have debruijn index of 1 because,
counting out, they are the 2nd binder enclosing ...
. The indices
identify the location within that binder.
The variables 'c
and 'd
both have debruijn index of 0 because
they appear in the innermost binder enclosing the ...
. The
indices identify the location within that binder.
Fields§
§debruijn: DebruijnIndex
Debruijn index, which identifies the binder.
index: usize
Index within the binder.
Implementations§
source§impl BoundVar
impl BoundVar
sourcepub fn new(debruijn: DebruijnIndex, index: usize) -> Self
pub fn new(debruijn: DebruijnIndex, index: usize) -> Self
Creates a new bound variable.
sourcepub fn to_lifetime<I: Interner>(self, interner: I) -> Lifetime<I>
pub fn to_lifetime<I: Interner>(self, interner: I) -> Lifetime<I>
Wrap the bound variable in a lifetime.
sourcepub fn to_const<I: Interner>(self, interner: I, ty: Ty<I>) -> Const<I>
pub fn to_const<I: Interner>(self, interner: I, ty: Ty<I>) -> Const<I>
Wraps the bound variable in a constant.
sourcepub fn bound_within(self, outer_binder: DebruijnIndex) -> bool
pub fn bound_within(self, outer_binder: DebruijnIndex) -> bool
True if this variable is bound within the amount
innermost binders.
sourcepub fn shifted_in(self) -> Self
pub fn shifted_in(self) -> Self
Adjusts the debruijn index (see DebruijnIndex::shifted_in
).
sourcepub fn shifted_in_from(self, outer_binder: DebruijnIndex) -> Self
pub fn shifted_in_from(self, outer_binder: DebruijnIndex) -> Self
Adjusts the debruijn index (see DebruijnIndex::shifted_in
).
sourcepub fn shifted_out(self) -> Option<Self>
pub fn shifted_out(self) -> Option<Self>
Adjusts the debruijn index (see DebruijnIndex::shifted_in
).
sourcepub fn shifted_out_to(self, outer_binder: DebruijnIndex) -> Option<Self>
pub fn shifted_out_to(self, outer_binder: DebruijnIndex) -> Option<Self>
Adjusts the debruijn index (see DebruijnIndex::shifted_in
).
sourcepub fn index_if_innermost(self) -> Option<usize>
pub fn index_if_innermost(self) -> Option<usize>
Return the index of the bound variable, but only if it is bound
at the innermost binder. Otherwise, returns None
.
sourcepub fn index_if_bound_at(self, debruijn: DebruijnIndex) -> Option<usize>
pub fn index_if_bound_at(self, debruijn: DebruijnIndex) -> Option<usize>
Return the index of the bound variable, but only if it is bound
at the innermost binder. Otherwise, returns None
.
Trait Implementations§
source§impl Ord for BoundVar
impl Ord for BoundVar
source§impl PartialEq for BoundVar
impl PartialEq for BoundVar
source§impl PartialOrd for BoundVar
impl PartialOrd for BoundVar
1.0.0 · source§fn le(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
self
and other
) and is used by the <=
operator. Read moreimpl Copy for BoundVar
impl Eq for BoundVar
impl StructuralPartialEq for BoundVar
Auto Trait Implementations§
impl Freeze for BoundVar
impl RefUnwindSafe for BoundVar
impl Send for BoundVar
impl Sync for BoundVar
impl Unpin for BoundVar
impl UnwindSafe for BoundVar
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: Copy,
impl<T> CloneToUninit for Twhere
T: Copy,
source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§default unsafe fn clone_to_uninit(&self, dst: *mut T)
default unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)