pub(crate) enum PlaceBase {
Local(Local),
Upvar {
var_hir_id: LocalVarId,
closure_def_id: LocalDefId,
},
}
Expand description
The “outermost” place that holds this value.
Variants
Local(Local)
Denotes the start of a Place
.
Upvar
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.
Trait Implementations
sourceimpl<'tcx> From<PlaceBase> for PlaceBuilder<'tcx>
impl<'tcx> From<PlaceBase> for PlaceBuilder<'tcx>
impl Copy for PlaceBase
impl StructuralPartialEq for PlaceBase
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
sourceimpl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<'a, T> Captures<'a> for Twhere
T: ?Sized,
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: 12 bytes
Size for each variant:
Local
: 4 bytesUpvar
: 12 bytes