pub(crate) struct AliasTree {
pub nodes: Vec<AliasNode>,
tag_of_local: FxHashMap<Local, usize>,
}Expand description
The per-function alias derivation forest.
Fields§
§nodes: Vec<AliasNode>§tag_of_local: FxHashMap<Local, usize>The tag that local currently names (its most recent binding).
Implementations§
Source§impl AliasTree
impl AliasTree
Sourcepub(crate) fn build<'tcx>(tcx: TyCtxt<'tcx>, def_id: DefId) -> Self
pub(crate) fn build<'tcx>(tcx: TyCtxt<'tcx>, def_id: DefId) -> Self
Build the derivation forest for def_id by scanning its MIR.
Parameters and owned results are roots; every target = <ref/cast/raw/copy> source statement adds an edge from source’s tag to
a new (or shared) tag for target. StorageDead/moves are not applied
here — the forest is a static, block-order approximation used only for
field-path resolution.
fn add( &mut self, parent: Option<usize>, fields: Vec<usize>, local: Local, ) -> usize
Sourcefn resolve_to_root(&self, tag: usize) -> (Local, Vec<usize>)
fn resolve_to_root(&self, tag: usize) -> (Local, Vec<usize>)
Walk tag’s parent edges to the root, concatenating the fields of each
hop. Returns the root local and the full field path (self.node.ptr →
(self, [node, ptr])).
Sourcepub(crate) fn resolve_local_to_root(&self, local: Local) -> (usize, Vec<usize>)
pub(crate) fn resolve_local_to_root(&self, local: Local) -> (usize, Vec<usize>)
Resolve a local to its root (root_local, field_path) via the tree. An
unmapped local resolves to itself with an empty field path.
Trait Implementations§
Auto Trait Implementations§
impl DynSend for AliasTree
impl DynSync for AliasTree
impl Freeze for AliasTree
impl RefUnwindSafe for AliasTree
impl Send for AliasTree
impl Sync for AliasTree
impl Unpin for AliasTree
impl UnsafeUnpin for AliasTree
impl UnwindSafe for AliasTree
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
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