Enum rustc_mir_build::build::expr::as_place::PlaceBase [−][src]
The “outermost” place that holds this value.
Variants
Local(Local)Denotes the start of a Place.
When building place for an expression within a closure, the place might start off a
captured path. When capture_disjoint_fields is enabled, we might not know the capture
index (within the desugared closure) of the captured path until most of the projections
are applied. We use PlaceBase::Upvar to keep track of the root variable off of which the
captured path starts, the closure the capture belongs to and the trait the closure
implements.
Once we have figured out the capture index, we can convert the place builder to start from
PlaceBase::Local.
Consider the following example
let t = (10, (10, (10, 10))); let c = || { println!("{}", t.0.0.0); };
Here the THIR expression for t.0.0.0 will be something like
* Field(0) * Field(0) * Field(0) * UpvarRef(t)
When capture_disjoint_fields is enabled, t.0.0.0 is captured and we won’t be able to
figure out that it is captured until all the Field projections are applied.
Fields of Upvar
var_hir_id: HirIdHirId of the upvar
closure_def_id: DefIdDefId of the closure
closure_kind: ClosureKindThe trait closure implements, Fn, FnMut, FnOnce
Trait Implementations
impl Clone for PlaceBase[src]
impl Copy for PlaceBase[src]
impl Debug for PlaceBase[src]
impl<'tcx> From<PlaceBase> for PlaceBuilder<'tcx>[src]
impl PartialEq<PlaceBase> for PlaceBase[src]
impl StructuralPartialEq for PlaceBase[src]
Auto Trait Implementations
impl RefUnwindSafe for PlaceBase
impl Send for PlaceBase
impl Sync for PlaceBase
impl Unpin for PlaceBase
impl UnwindSafe for PlaceBase
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> ToOwned for T where
T: Clone, [src]
T: Clone,
type Owned = T
The resulting type after obtaining ownership.
pub fn to_owned(&self) -> T[src]
pub fn clone_into(&self, target: &mut T)[src]
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>,