[][src]Struct rustc_mir::dataflow::ResultsCursor

pub struct ResultsCursor<'mir, 'tcx, A, R = Results<'tcx, A>> where
    A: Analysis<'tcx>, 
{ body: &'mir Body<'tcx>, results: R, state: A::Domain, pos: CursorPosition, state_needs_reset: bool, reachable_blocks: BitSet<BasicBlock>, }

Allows random access inspection of the results of a dataflow analysis.

This cursor only has linear performance within a basic block when its statements are visited in the same order as the DIRECTION of the analysis. In the worst case—when statements are visited in reverse order—performance will be quadratic in the number of statements in the block. The order in which basic blocks are inspected has no impact on performance.

A ResultsCursor can either own (the default) or borrow the dataflow results it inspects. The type of ownership is determined by R (see ResultsRefCursor above).

Fields

body: &'mir Body<'tcx>results: Rstate: A::Domainpos: CursorPositionstate_needs_reset: bool

Indicates that state has been modified with a custom effect.

When this flag is set, we need to reset to an entry set before doing a seek.

reachable_blocks: BitSet<BasicBlock>

Implementations

impl<'mir, 'tcx, A, R> ResultsCursor<'mir, 'tcx, A, R> where
    A: Analysis<'tcx>,
    R: Borrow<Results<'tcx, A>>, 
[src]

pub fn new(body: &'mir Body<'tcx>, results: R) -> Self[src]

Returns a new cursor that can inspect results.

pub fn body(&self) -> &'mir Body<'tcx>[src]

pub fn results(&self) -> &Results<'tcx, A>[src]

Returns the underlying Results.

pub fn analysis(&self) -> &A[src]

Returns the Analysis used to generate the underlying Results.

pub fn get(&self) -> &A::Domain[src]

Returns the dataflow state at the current location.

pub(super) fn seek_to_block_entry(
    &mut self,
    block: BasicBlock
)
[src]

Resets the cursor to hold the entry set for the given basic block.

For forward dataflow analyses, this is the dataflow state prior to the first statement.

For backward dataflow analyses, this is the dataflow state after the terminator.

pub fn seek_to_block_start(&mut self, block: BasicBlock)[src]

Resets the cursor to hold the state prior to the first statement in a basic block.

For forward analyses, this is the entry set for the given block.

For backward analyses, this is the state that will be propagated to its predecessors (ignoring edge-specific effects).

pub fn seek_to_block_end(&mut self, block: BasicBlock)[src]

Resets the cursor to hold the state after the terminator in a basic block.

For backward analyses, this is the entry set for the given block.

For forward analyses, this is the state that will be propagated to its successors (ignoring edge-specific effects).

pub fn seek_before_primary_effect(&mut self, target: Location)[src]

Advances the cursor to hold the dataflow state at target before its "primary" effect is applied.

The "before" effect at the target location will be applied.

pub fn seek_after_primary_effect(&mut self, target: Location)[src]

Advances the cursor to hold the dataflow state at target after its "primary" effect is applied.

The "before" effect at the target location will be applied as well.

fn seek_after(&mut self, target: Location, effect: Effect)[src]

pub fn apply_custom_effect(&mut self, f: impl FnOnce(&A, &mut A::Domain))[src]

Applies f to the cursor's internal state.

This can be used, e.g., to apply the call return effect directly to the cursor without creating an extra copy of the dataflow state.

impl<'mir, 'tcx, A, R, T> ResultsCursor<'mir, 'tcx, A, R> where
    A: Analysis<'tcx, Domain = BitSet<T>>,
    T: Idx,
    R: Borrow<Results<'tcx, A>>, 
[src]

pub fn contains(&self, elem: T) -> bool[src]

Auto Trait Implementations

impl<'mir, 'tcx, A, R = Results<'tcx, A>> !RefUnwindSafe for ResultsCursor<'mir, 'tcx, A, R>

impl<'mir, 'tcx, A, R = Results<'tcx, A>> !Send for ResultsCursor<'mir, 'tcx, A, R>

impl<'mir, 'tcx, A, R = Results<'tcx, A>> !Sync for ResultsCursor<'mir, 'tcx, A, R>

impl<'mir, 'tcx, A, R> Unpin for ResultsCursor<'mir, 'tcx, A, R> where
    R: Unpin,
    <A as AnalysisDomain<'tcx>>::Domain: Unpin,
    'tcx: 'mir, 

impl<'mir, 'tcx, A, R = Results<'tcx, A>> !UnwindSafe for ResultsCursor<'mir, 'tcx, A, R>

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.

impl<T> WithConstness for T[src]