Struct rustc_mir::borrow_check::places_conflict::PlaceComponents[][src]

struct PlaceComponents<'p, 'tcx: 'p> {
    component: &'p Place<'tcx>,
    next: Option<&'p PlaceComponents<'p, 'tcx>>,
}
🔬 This is a nightly-only experimental API. (rustc_private)

this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml instead?

A linked list of places running up the stack; begins with the innermost place and extends to projections (e.g., a.b would have the place a with a "next" pointer to a.b). Created by unroll_place.

NB: This particular impl strategy is not the most obvious. It was chosen because it makes a measurable difference to NLL performance, as this code (places_conflict) is somewhat hot.

Fields

🔬 This is a nightly-only experimental API. (rustc_private)

this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml instead?

🔬 This is a nightly-only experimental API. (rustc_private)

this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml instead?

Methods

impl<'p, 'tcx> PlaceComponents<'p, 'tcx>
[src]

🔬 This is a nightly-only experimental API. (rustc_private)

this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml instead?

Converts a list of Place components into an iterator; this iterator yields up a never-ending stream of Option<&Place>. These begin with the "innermst" place and then with each projection therefrom. So given a place like a.b.c it would yield up:

Some(`a`), Some(`a.b`), Some(`a.b.c`), None, None, ...

Auto Trait Implementations

impl<'p, 'tcx> !Send for PlaceComponents<'p, 'tcx>

impl<'p, 'tcx> !Sync for PlaceComponents<'p, 'tcx>