pub struct ControlFlowGraph<'tcx> {
pub def_id: DefId,
pub tcx: TyCtxt<'tcx>,
pub blocks: Vec<CfgBlock>,
}Expand description
Generic MIR control-flow graph container.
This structure intentionally keeps only generic CFG shape and SCC metadata.
Fields§
§def_id: DefIdDefinition being analyzed.
tcx: TyCtxt<'tcx>Type context from the Rust compiler.
blocks: Vec<CfgBlock>All CFG blocks for the current body.
Implementations§
Source§impl<'tcx> ControlFlowGraph<'tcx>
impl<'tcx> ControlFlowGraph<'tcx>
Sourcepub fn new(def_id: DefId, tcx: TyCtxt<'tcx>, blocks: Vec<CfgBlock>) -> Self
pub fn new(def_id: DefId, tcx: TyCtxt<'tcx>, blocks: Vec<CfgBlock>) -> Self
Construct a control-flow graph wrapper from prebuilt blocks.
Sourcepub fn block_mut(&mut self, index: usize) -> &mut CfgBlock
pub fn block_mut(&mut self, index: usize) -> &mut CfgBlock
Get a mutable reference to a block by index.
Sourcepub fn terminator(&self, index: usize) -> Option<&Terminator<'tcx>>
pub fn terminator(&self, index: usize) -> Option<&Terminator<'tcx>>
Retrieve the MIR terminator for the block at index on demand.
Returns None only for blocks whose terminator has not yet been
elaborated (which is unusual for optimized MIR).
Trait Implementations§
Source§impl<'tcx> Clone for ControlFlowGraph<'tcx>
impl<'tcx> Clone for ControlFlowGraph<'tcx>
Source§fn clone(&self) -> ControlFlowGraph<'tcx>
fn clone(&self) -> ControlFlowGraph<'tcx>
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<'tcx> Scc for ControlFlowGraph<'tcx>
impl<'tcx> Scc for ControlFlowGraph<'tcx>
Source§fn on_scc_found(&mut self, root: usize, scc_components: &[usize])
fn on_scc_found(&mut self, root: usize, scc_components: &[usize])
Callback invoked when an SCC is discovered.
Source§fn get_next(&mut self, root: usize) -> FxHashSet<usize>
fn get_next(&mut self, root: usize) -> FxHashSet<usize>
Return the outgoing successors of a node.
Source§fn find_scc_from(&mut self, start: usize)
fn find_scc_from(&mut self, start: usize)
Run SCC discovery from a specific start node.
Auto Trait Implementations§
impl<'tcx> Freeze for ControlFlowGraph<'tcx>
impl<'tcx> !RefUnwindSafe for ControlFlowGraph<'tcx>
impl<'tcx> !Send for ControlFlowGraph<'tcx>
impl<'tcx> !Sync for ControlFlowGraph<'tcx>
impl<'tcx> Unpin for ControlFlowGraph<'tcx>
impl<'tcx> !UnwindSafe for ControlFlowGraph<'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
Mutably borrows from an owned value. Read more
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