Struct rustc_typeck::check::pat::TopInfo [−][src]
struct TopInfo<'tcx> {
expected: Ty<'tcx>,
origin_expr: bool,
span: Option<Span>,
parent_pat: Option<&'tcx Pat<'tcx>>,
}Expand description
Information about the expected type at the top level of type checking a pattern.
NOTE: This is only for use by diagnostics. Do NOT use for type checking logic!
Fields
expected: Ty<'tcx>Expand description
The expected type at the top level of type checking a pattern.
origin_expr: boolExpand description
Was the origin of the span from a scrutinee expression?
Otherwise there is no scrutinee and it could be e.g. from the type of a formal parameter.
span: Option<Span>Expand description
The span giving rise to the expected type, if one could be provided.
If origin_expr is true, then this is the span of the scrutinee as in:
match scrutinee { ... }let _ = scrutinee;
This is used to point to add context in type errors.
In the following example, span corresponds to the a + b expression:
error[E0308]: mismatched types
--> src/main.rs:L:C
|
L | let temp: usize = match a + b {
| ----- this expression has type `usize`
L | Ok(num) => num,
| ^^^^^^^ expected `usize`, found enum `std::result::Result`
|
= note: expected type `usize`
found type `std::result::Result<_, _>`
parent_pat: Option<&'tcx Pat<'tcx>>Expand description
This refers to the parent pattern. Used to provide extra diagnostic information on errors.
error[E0308]: mismatched types
--> $DIR/const-in-struct-pat.rs:8:17
|
L | struct f;
| --------- unit struct defined here
...
L | let Thing { f } = t;
| ^
| |
| expected struct `std::string::String`, found struct `f`
| `f` is interpreted as a unit struct, not a new binding
| help: bind the struct field to a different name instead: `f: other_f`
Trait Implementations
Auto Trait Implementations
impl<'tcx> !RefUnwindSafe for TopInfo<'tcx>
impl<'tcx> !Send for TopInfo<'tcx>
impl<'tcx> !Sync for TopInfo<'tcx>
impl<'tcx> Unpin for TopInfo<'tcx>
impl<'tcx> !UnwindSafe for TopInfo<'tcx>
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<T> WithConstness for T[src]
impl<T> WithConstness for T[src]fn with_constness(self, constness: Constness) -> ConstnessAnd<Self>[src]
fn with_const(self) -> ConstnessAnd<Self>[src]
fn without_const(self) -> ConstnessAnd<Self>[src]
impl<'a, T> Captures<'a> for T where
T: ?Sized, [src]
T: ?Sized,