pub struct MovePath<'tcx> {
pub next_sibling: Option<MovePathIndex>,
pub first_child: Option<MovePathIndex>,
pub parent: Option<MovePathIndex>,
pub place: Place<'tcx>,
}Expand description
MovePath is a canonicalized representation of a place that is of
interest to dataflow analysis, as identified by gather_moves. This
is primarily places that are moved or inited (assigned). Each
MovePath is assigned a MovePathIndex by which it can be referred
to.
MovePath follows a tree structure.
Given struct X { m: M, n: N } and x: X, moves like drop x.m;
move out of the place x.m.
The MovePaths representing x.m and x.n are siblings (that is,
one of them will link to the other via the next_sibling field,
and the other will have no entry in its next_sibling field), and
they both have the MovePath representing x as their parent.
(All tree roots are locals). This structure allows easy traversal
between related paths x and x.m and x.n.
Fields§
§next_sibling: Option<MovePathIndex>§first_child: Option<MovePathIndex>§parent: Option<MovePathIndex>§place: Place<'tcx>Implementations§
Source§impl<'tcx> MovePath<'tcx>
impl<'tcx> MovePath<'tcx>
Sourcepub fn parents<'a>(
&self,
move_paths: &'a IndexSlice<MovePathIndex, MovePath<'tcx>>,
) -> impl 'a + Iterator<Item = (MovePathIndex, &'a MovePath<'tcx>)>
pub fn parents<'a>( &self, move_paths: &'a IndexSlice<MovePathIndex, MovePath<'tcx>>, ) -> impl 'a + Iterator<Item = (MovePathIndex, &'a MovePath<'tcx>)>
Returns an iterator over the parents of self.
Sourcepub fn children<'a>(
&self,
move_paths: &'a IndexSlice<MovePathIndex, MovePath<'tcx>>,
) -> impl 'a + Iterator<Item = (MovePathIndex, &'a MovePath<'tcx>)>
pub fn children<'a>( &self, move_paths: &'a IndexSlice<MovePathIndex, MovePath<'tcx>>, ) -> impl 'a + Iterator<Item = (MovePathIndex, &'a MovePath<'tcx>)>
Returns an iterator over the immediate children of self.
Sourcepub fn find_descendant(
&self,
move_paths: &IndexSlice<MovePathIndex, MovePath<'_>>,
f: impl Fn(MovePathIndex) -> bool,
) -> Option<MovePathIndex>
pub fn find_descendant( &self, move_paths: &IndexSlice<MovePathIndex, MovePath<'_>>, f: impl Fn(MovePathIndex) -> bool, ) -> Option<MovePathIndex>
Finds the closest descendant of self for which f returns true using a breadth-first
search.
f will not be called on self.
Trait Implementations§
Auto Trait Implementations§
impl<'tcx> !RefUnwindSafe for MovePath<'tcx>
impl<'tcx> !UnwindSafe for MovePath<'tcx>
impl<'tcx> DynSend for MovePath<'tcx>
impl<'tcx> DynSync for MovePath<'tcx>
impl<'tcx> Freeze for MovePath<'tcx>
impl<'tcx> Send for MovePath<'tcx>
impl<'tcx> Sync for MovePath<'tcx>
impl<'tcx> Unpin for MovePath<'tcx>
impl<'tcx> UnsafeUnpin for MovePath<'tcx>
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,
Source§impl<T, R> CollectAndApply<T, R> for T
impl<T, R> CollectAndApply<T, R> for T
impl<T> ErasedDestructor for Twhere
T: 'static,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§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> ⓘ
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 moreSource§impl<K> IntoQueryKey<K> for K
impl<K> IntoQueryKey<K> for K
Source§fn into_query_key(self) -> K
fn into_query_key(self) -> K
Self to K.
This should always be a very cheap conversion, e.g. LocalDefId::to_def_id.Source§impl<T> MaybeResult<T> for T
impl<T> MaybeResult<T> for T
Source§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<I, T, U> Upcast<I, U> for Twhere
U: UpcastFrom<I, T>,
impl<I, T, U> Upcast<I, U> for Twhere
U: UpcastFrom<I, T>,
Source§impl<I, T> UpcastFrom<I, T> for T
impl<I, T> UpcastFrom<I, T> for T
fn upcast_from(from: T, _tcx: I) -> T
Source§impl<T> WithSubscriber for T
impl<T> WithSubscriber for T
Source§fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
Source§fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ
fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ
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