Enum rustc_mir_build::build::expr::as_place::PlaceBase [−][src]
pub(crate) enum PlaceBase {
Local(Local),
Upvar {
var_hir_id: HirId,
closure_def_id: DefId,
closure_kind: ClosureKind,
},
}Expand description
The “outermost” place that holds this value.
Variants
Local(Local)Expand description
Denotes the start of a Place.
Expand description
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.
Show fields
Fields of Upvar
var_hir_id: HirIdExpand description
HirId of the upvar
closure_def_id: DefIdExpand description
DefId of the closure
closure_kind: ClosureKindExpand description
The trait closure implements, Fn, FnMut, FnOnce
Trait Implementations
impl<'tcx> From<PlaceBase> for PlaceBuilder<'tcx>[src]
impl<'tcx> From<PlaceBase> for PlaceBuilder<'tcx>[src]impl Copy 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> BorrowMut<T> for T where
T: ?Sized, [src]
impl<T> BorrowMut<T> for T where
T: ?Sized, [src]pub fn borrow_mut(&mut self) -> &mut T[src]
pub fn borrow_mut(&mut self) -> &mut T[src]Mutably borrows from an owned value. Read more
impl<T> ToOwned for T where
T: Clone, [src]
impl<T> ToOwned for T where
T: Clone, [src]type Owned = T
type Owned = TThe resulting type after obtaining ownership.
pub fn to_owned(&self) -> T[src]
pub fn to_owned(&self) -> T[src]Creates owned data from borrowed data, usually by cloning. Read more
pub fn clone_into(&self, target: &mut T)[src]
pub fn clone_into(&self, target: &mut T)[src]🔬 This is a nightly-only experimental API. (toowned_clone_into)
recently added
Uses borrowed data to replace owned data, usually by cloning. Read more
impl<'a, T> Captures<'a> for T where
T: ?Sized, [src]
T: ?Sized,