[−][src]Struct rustc_mir_build::build::scope::DropTree

pub(in build::scope) struct DropTree {
    drops: IndexVec<DropIdx, (DropData, DropIdx)>,
    previous_drops: FxHashMap<(DropIdx, Local, DropKind), DropIdx>,
    entry_points: Vec<(DropIdx, BasicBlock)>,
}

A tree of drops that we have deferred lowering. It's used for:

Once no more nodes could be added to the tree, we lower it to MIR in one go in build_mir.

Fields

drops: IndexVec<DropIdx, (DropData, DropIdx)>

Drops in the tree.

previous_drops: FxHashMap<(DropIdx, Local, DropKind), DropIdx>

Map for finding the inverse of the next_drop relation:

previous_drops[(drops[i].1, drops[i].0.local, drops[i].0.kind)] == i

entry_points: Vec<(DropIdx, BasicBlock)>

Edges into the DropTree that need to be added once it's lowered.

Implementations

impl DropTree[src]

pub(in build::scope) fn new(
) -> Self
[src]

pub(in build::scope) fn add_drop(
    &mut self,
    drop: DropData,
    next: DropIdx
) -> DropIdx
[src]

pub(in build::scope) fn add_entry(
    &mut self,
    from: BasicBlock,
    to: DropIdx
)
[src]

pub(in build::scope) fn build_mir<'tcx, T: DropTreeBuilder<'tcx>>(
    &mut self,
    cfg: &mut CFG<'tcx>,
    blocks: &mut IndexVec<DropIdx, Option<BasicBlock>>
)
[src]

Builds the MIR for a given drop tree.

blocks should have the same length as self.drops, and may have its first value set to some already existing block.

pub(in build::scope) fn assign_blocks<'tcx, T: DropTreeBuilder<'tcx>>(
    &mut self,
    cfg: &mut CFG<'tcx>,
    blocks: &mut IndexVec<DropIdx, Option<BasicBlock>>
)
[src]

Assign blocks for all of the drops in the drop tree that need them.

Trait Implementations

impl Debug for DropTree[src]

Auto Trait Implementations

impl RefUnwindSafe for DropTree

impl !Send for DropTree

impl !Sync for DropTree

impl Unpin for DropTree

impl UnwindSafe for DropTree

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<'a, T> Captures<'a> 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.