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

struct DropTree {
    drops: IndexVec<DropIdx, (DropData, DropIdx)>,
    previous_drops: FxHashMap<(DropIdx, Local, DropKind), DropIdx>,
    entry_points: Vec<(DropIdx, BasicBlock)>,
}
Expand description

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

  • Drops on unwind paths
  • Drops on generator drop paths (when a suspended generator is dropped)
  • Drops on return and loop exit paths

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)>
Expand description

Drops in the tree.

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

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)>
Expand description

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

Implementations

impl DropTree[src]

fn new() -> Self[src]

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

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

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.

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]

fn fmt(&self, f: &mut Formatter<'_>) -> Result[src]

Formats the value using the given formatter. Read more

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]

pub fn type_id(&self) -> TypeId[src]

Gets the TypeId of self. Read more

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

pub fn borrow(&self) -> &T[src]

Immutably borrows from an owned value. Read more

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

pub fn borrow_mut(&mut self) -> &mut T[src]

Mutably borrows from an owned value. Read more

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

pub fn from(t: T) -> T[src]

Performs the conversion.

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

pub fn into(self) -> U[src]

Performs the conversion.

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.

pub fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>[src]

Performs the conversion.

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.

pub fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>[src]

Performs the conversion.

impl<'a, T> Captures<'a> for T where
    T: ?Sized, 
[src]