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.

Upvar
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: HirId
Expand description

HirId of the upvar

closure_def_id: DefId
Expand description

DefId of the closure

closure_kind: ClosureKind
Expand description

The trait closure implements, Fn, FnMut, FnOnce

Trait Implementations

impl Clone for PlaceBase[src]

fn clone(&self) -> PlaceBase[src]

Returns a copy of the value. Read more

fn clone_from(&mut self, source: &Self)1.0.0[src]

Performs copy-assignment from source. Read more

impl Debug for PlaceBase[src]

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

Formats the value using the given formatter. Read more

impl<'tcx> From<PlaceBase> for PlaceBuilder<'tcx>[src]

fn from(base: PlaceBase) -> Self[src]

Performs the conversion.

impl PartialEq<PlaceBase> for PlaceBase[src]

fn eq(&self, other: &PlaceBase) -> bool[src]

This method tests for self and other values to be equal, and is used by ==. Read more

fn ne(&self, other: &PlaceBase) -> bool[src]

This method tests for !=.

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> 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> ToOwned for T where
    T: Clone, 
[src]

type Owned = T

The resulting type after obtaining ownership.

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]

🔬 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<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<'a, T> Captures<'a> for T where
    T: ?Sized, 
[src]