Struct rustc_mir::dataflow::impls::borrows::Borrows[−][src]

pub struct Borrows<'a, 'tcx> {
    tcx: TyCtxt<'tcx>,
    body: &'a Body<'tcx>,
    borrow_set: &'a BorrowSet<'tcx>,
    borrows_out_of_scope_at_location: FxHashMap<Location, Vec<BorrowIndex>>,
}
Expand description

Borrows stores the data used in the analyses that track the flow of borrows.

It uniquely identifies every borrow (Rvalue::Ref) by a BorrowIndex, and maps each such index to a BorrowData describing the borrow. These indexes are used for representing the borrows in compact bitvectors.

Fields

tcx: TyCtxt<'tcx>body: &'a Body<'tcx>borrow_set: &'a BorrowSet<'tcx>borrows_out_of_scope_at_location: FxHashMap<Location, Vec<BorrowIndex>>

Implementations

impl<'a, 'tcx> Borrows<'a, 'tcx>[src]

pub(crate) fn new(
    tcx: TyCtxt<'tcx>,
    body: &'a Body<'tcx>,
    nonlexical_regioncx: &'a RegionInferenceContext<'tcx>,
    borrow_set: &'a BorrowSet<'tcx>
) -> Self
[src]

pub fn location(&self, idx: BorrowIndex) -> &Location[src]

fn kill_loans_out_of_scope_at_location(
    &self,
    trans: &mut impl GenKill<BorrowIndex>,
    location: Location
)
[src]

Add all borrows to the kill set, if those borrows are out of scope at location. That means they went out of a nonlexical scope

fn kill_borrows_on_place(
    &self,
    trans: &mut impl GenKill<BorrowIndex>,
    place: Place<'tcx>
)
[src]

Kill any borrows that conflict with place.

Trait Implementations

impl<'tcx> AnalysisDomain<'tcx> for Borrows<'_, 'tcx>[src]

type Domain = BitSet<BorrowIndex>

The type that holds the dataflow state at any given point in the program.

const NAME: &'static str[src]

A descriptive name for this analysis. Used only for debugging. Read more

fn bottom_value(&self, _: &Body<'tcx>) -> Self::Domain[src]

The initial value of the dataflow state upon entry to each basic block.

fn initialize_start_block(&self, _: &Body<'tcx>, _: &mut Self::Domain)[src]

Mutates the initial value of the dataflow state upon entry to the START_BLOCK. Read more

type Direction: Direction = Forward

The direction of this analysis. Either Forward or Backward.

impl DebugWithContext<Borrows<'_, '_>> for BorrowIndex[src]

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

fn fmt_diff_with(&self, old: &Self, ctxt: &C, f: &mut Formatter<'_>) -> Result[src]

Print the difference between self and old. Read more

impl<'tcx> GenKillAnalysis<'tcx> for Borrows<'_, 'tcx>[src]

type Idx = BorrowIndex

fn before_statement_effect(
    &self,
    trans: &mut impl GenKill<Self::Idx>,
    _statement: &Statement<'tcx>,
    location: Location
)
[src]

See Analysis::apply_before_statement_effect.

fn statement_effect(
    &self,
    trans: &mut impl GenKill<Self::Idx>,
    stmt: &Statement<'tcx>,
    location: Location
)
[src]

See Analysis::apply_statement_effect.

fn before_terminator_effect(
    &self,
    trans: &mut impl GenKill<Self::Idx>,
    _terminator: &Terminator<'tcx>,
    location: Location
)
[src]

See Analysis::apply_before_terminator_effect.

fn terminator_effect(
    &self,
    trans: &mut impl GenKill<Self::Idx>,
    teminator: &Terminator<'tcx>,
    _location: Location
)
[src]

See Analysis::apply_terminator_effect.

fn call_return_effect(
    &self,
    _trans: &mut impl GenKill<Self::Idx>,
    _block: BasicBlock,
    _func: &Operand<'tcx>,
    _args: &[Operand<'tcx>],
    _dest_place: Place<'tcx>
)
[src]

See Analysis::apply_call_return_effect.

fn yield_resume_effect(
    &self,
    _trans: &mut impl GenKill<Self::Idx>,
    _resume_block: BasicBlock,
    _resume_place: Place<'tcx>
)
[src]

See Analysis::apply_yield_resume_effect.

fn switch_int_edge_effects<G: GenKill<Self::Idx>>(
    &self,
    _block: BasicBlock,
    _discr: &Operand<'tcx>,
    _edge_effects: &mut impl SwitchIntEdgeEffects<G>
)
[src]

See Analysis::apply_switch_int_edge_effects.

Auto Trait Implementations

impl<'a, 'tcx> !RefUnwindSafe for Borrows<'a, 'tcx>

impl<'a, 'tcx> !Send for Borrows<'a, 'tcx>

impl<'a, 'tcx> !Sync for Borrows<'a, 'tcx>

impl<'a, 'tcx> Unpin for Borrows<'a, 'tcx> where
    'tcx: 'a, 

impl<'a, 'tcx> !UnwindSafe for Borrows<'a, 'tcx>

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<T> WithConstness for T[src]

fn with_constness(self, constness: Constness) -> ConstnessAnd<Self>[src]

fn with_const(self) -> ConstnessAnd<Self>[src]

fn without_const(self) -> ConstnessAnd<Self>[src]