pub struct BorrowSet<'tcx> {
borrows: IndexVec<BorrowIndex, BorrowData<'tcx>>,
location_map: FxHashMap<Location, SmallVec<[BorrowIndex; 1]>>,
activation_map: FxHashMap<Location, SmallVec<[BorrowIndex; 1]>>,
local_map: FxIndexMap<Local, FxIndexSet<BorrowIndex>>,
locals_state_at_exit: LocalsStateAtExit,
}Fields§
§borrows: IndexVec<BorrowIndex, BorrowData<'tcx>>BorrowData storage.
location_map: FxHashMap<Location, SmallVec<[BorrowIndex; 1]>>The fundamental map relating bitvector indexes to the borrows
in the MIR. Each borrow of a reference is uniquely identified in the MIR
by the Location of the assignment statement in which it
appears on the right hand side, but for generic Reborrow there may be
multiple borrows per location. Thus the location is the map
key, and it identifies one or more BorrowIndex values.
FIXME(reborrow): if the Reborrow experiment is rejected, this can be turned back into a FxIndexMap<Location, BorrowData<’tcx> or BorrowIndex>. See PR.
activation_map: FxHashMap<Location, SmallVec<[BorrowIndex; 1]>>Locations which activate borrows.
local_map: FxIndexMap<Local, FxIndexSet<BorrowIndex>>Map from local to all the borrows on that local.
locals_state_at_exit: LocalsStateAtExitImplementations§
Source§impl<'tcx> BorrowSet<'tcx>
impl<'tcx> BorrowSet<'tcx>
pub fn build( tcx: TyCtxt<'tcx>, body: &Body<'tcx>, locals_are_invalidated_at_exit: bool, move_data: &MoveData<'tcx>, ) -> Self
Sourcepub fn iter(&self) -> impl Iterator<Item = &BorrowData<'tcx>>
pub fn iter(&self) -> impl Iterator<Item = &BorrowData<'tcx>>
Iterate through all BorrowData in the BorrowSet.
pub(crate) fn locals_state_at_exit(&self) -> &LocalsStateAtExit
pub(crate) fn len(&self) -> usize
pub(crate) fn iter_enumerated( &self, ) -> impl Iterator<Item = (BorrowIndex, &BorrowData<'tcx>)>
pub(crate) fn activations_at_location( &self, location: &Location, ) -> &[BorrowIndex]
pub(crate) fn borrows_at_location( &self, location: &Location, ) -> Option<&[BorrowIndex]>
pub(crate) fn borrows_on_local( &self, local: Local, ) -> Option<&IndexSet<BorrowIndex>>
Trait Implementations§
Source§impl<'tcx> Index<BorrowIndex> for BorrowSet<'tcx>
impl<'tcx> Index<BorrowIndex> for BorrowSet<'tcx>
Source§type Output = BorrowData<'tcx>
type Output = BorrowData<'tcx>
Source§fn index(&self, index: BorrowIndex) -> &BorrowData<'tcx>
fn index(&self, index: BorrowIndex) -> &BorrowData<'tcx>
container[index]) operation. Read moreAuto Trait Implementations§
impl<'tcx> !RefUnwindSafe for BorrowSet<'tcx>
impl<'tcx> !UnwindSafe for BorrowSet<'tcx>
impl<'tcx> DynSend for BorrowSet<'tcx>
impl<'tcx> DynSync for BorrowSet<'tcx>
impl<'tcx> Freeze for BorrowSet<'tcx>
impl<'tcx> Send for BorrowSet<'tcx>
impl<'tcx> Sync for BorrowSet<'tcx>
impl<'tcx> Unpin for BorrowSet<'tcx>
impl<'tcx> UnsafeUnpin for BorrowSet<'tcx>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T, R> CollectAndApply<T, R> for T
impl<T, R> CollectAndApply<T, R> for T
impl<T> ErasedDestructor for Twhere
T: 'static,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<K> IntoQueryKey<K> for K
impl<K> IntoQueryKey<K> for K
Source§fn into_query_key(self) -> K
fn into_query_key(self) -> K
Self to K.
This should always be a very cheap conversion, e.g. LocalDefId::to_def_id.Source§impl<T> MaybeResult<T> for T
impl<T> MaybeResult<T> for T
Source§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<I, T, U> Upcast<I, U> for Twhere
U: UpcastFrom<I, T>,
impl<I, T, U> Upcast<I, U> for Twhere
U: UpcastFrom<I, T>,
Source§impl<I, T> UpcastFrom<I, T> for T
impl<I, T> UpcastFrom<I, T> for T
fn upcast_from(from: T, _tcx: I) -> T
Source§impl<T> WithSubscriber for T
impl<T> WithSubscriber for T
Source§fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
Source§fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ
fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ
Layout§
Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...) attributes. Please see the Rust Reference's “Type Layout” chapter for details on type layout guarantees.
Size: 176 bytes