[−][src]Struct rustc_mir_build::build::scope::DropTree
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)>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]
) -> Self
pub(in build::scope) fn add_drop(
&mut self,
drop: DropData,
next: DropIdx
) -> DropIdx[src]
&mut self,
drop: DropData,
next: DropIdx
) -> DropIdx
pub(in build::scope) fn add_entry(
&mut self,
from: BasicBlock,
to: DropIdx
)[src]
&mut self,
from: BasicBlock,
to: DropIdx
)
pub(in build::scope) fn build_mir<'tcx, T: DropTreeBuilder<'tcx>>(
&mut self,
cfg: &mut CFG<'tcx>,
blocks: &mut IndexVec<DropIdx, Option<BasicBlock>>
)[src]
&mut self,
cfg: &mut CFG<'tcx>,
blocks: &mut IndexVec<DropIdx, Option<BasicBlock>>
)
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]
&mut self,
cfg: &mut CFG<'tcx>,
blocks: &mut IndexVec<DropIdx, Option<BasicBlock>>
)
Assign blocks for all of the drops in the drop tree that need them.
pub(in build::scope) fn link_blocks<'tcx>(
&self,
cfg: &mut CFG<'tcx>,
blocks: &IndexVec<DropIdx, Option<BasicBlock>>
)[src]
&self,
cfg: &mut CFG<'tcx>,
blocks: &IndexVec<DropIdx, Option<BasicBlock>>
)
Trait Implementations
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]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized, [src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized, [src]
T: ?Sized,
pub fn borrow_mut(&mut self) -> &mut T[src]
impl<'a, T> Captures<'a> for T where
T: ?Sized, [src]
T: ?Sized,
impl<T> From<T> for T[src]
impl<T, U> Into<U> for T where
U: From<T>, [src]
U: From<T>,
impl<T, U> TryFrom<U> for T where
U: Into<T>, [src]
U: Into<T>,
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]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>, [src]
U: TryFrom<T>,