Struct rustc_middle::mir::UserTypeProjections[][src]

pub struct UserTypeProjections {
    pub contents: Vec<(UserTypeProjection, Span)>,
}

A collection of projections into user types.

They are projections because a binding can occur a part of a parent pattern that has been ascribed a type.

Its a collection because there can be multiple type ascriptions on the path from the root of the pattern down to the binding itself.

An example:

struct S<'a>((i32, &'a str), String);
let S((_, w): (i32, &'static str), _): S = ...;
//    ------  ^^^^^^^^^^^^^^^^^^^ (1)
//  ---------------------------------  ^ (2)

The highlights labelled (1) show the subpattern (_, w) being ascribed the type (i32, &'static str).

The highlights labelled (2) show the whole pattern being ascribed the type S.

In this example, when we descend to w, we will have built up the following two projected types:

The first will lead to the constraint w: &'1 str (for some inferred region '1). The second will lead to the constraint w: &'static str.

Fields

contents: Vec<(UserTypeProjection, Span)>

Implementations

impl<'tcx> UserTypeProjections[src]

pub fn none() -> Self[src]

pub fn is_empty(&self) -> bool[src]

pub fn projections_and_spans(
    &self
) -> impl Iterator<Item = &(UserTypeProjection, Span)> + ExactSizeIterator
[src]

pub fn projections(
    &self
) -> impl Iterator<Item = &UserTypeProjection> + ExactSizeIterator
[src]

pub fn push_projection(self, user_ty: &UserTypeProjection, span: Span) -> Self[src]

fn map_projections(
    self,
    f: impl FnMut(UserTypeProjection) -> UserTypeProjection
) -> Self
[src]

pub fn index(self) -> Self[src]

pub fn subslice(self, from: u64, to: u64) -> Self[src]

pub fn deref(self) -> Self[src]

pub fn leaf(self, field: Field) -> Self[src]

pub fn variant(
    self,
    adt_def: &'tcx AdtDef,
    variant_index: VariantIdx,
    field: Field
) -> Self
[src]

Trait Implementations

impl Clone for UserTypeProjections[src]

impl Debug for UserTypeProjections[src]

impl<'tcx, __D: TyDecoder<'tcx>> Decodable<__D> for UserTypeProjections[src]

impl<'tcx, __E: TyEncoder<'tcx>> Encodable<__E> for UserTypeProjections[src]

impl<'__ctx> HashStable<StableHashingContext<'__ctx>> for UserTypeProjections[src]

impl<'tcx> TypeFoldable<'tcx> for UserTypeProjections[src]

Auto Trait Implementations

impl RefUnwindSafe for UserTypeProjections

impl !Send for UserTypeProjections

impl !Sync for UserTypeProjections

impl Unpin for UserTypeProjections

impl UnwindSafe for UserTypeProjections

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<'a, T> Captures<'a> for T where
    T: ?Sized
[src]

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T> MaybeResult<T> for T[src]

type Error = !

impl<'tcx, T> Subst<'tcx> for T where
    T: TypeFoldable<'tcx>, 
[src]

impl<T> ToOwned for T where
    T: Clone
[src]

type Owned = T

The resulting type after obtaining ownership.

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.

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.

impl<T> WithConstness for T[src]