struct MatchVisitor<'p, 'tcx> {
tcx: TyCtxt<'tcx>,
typing_env: TypingEnv<'tcx>,
typeck_results: &'tcx TypeckResults<'tcx>,
thir: &'p Thir<'tcx>,
lint_level: HirId,
let_source: LetSource,
pattern_arena: &'p TypedArena<DeconstructedPat<'p, 'tcx>>,
dropless_arena: &'p DroplessArena,
error: Result<(), ErrorGuaranteed>,
}Fields§
§tcx: TyCtxt<'tcx>§typing_env: TypingEnv<'tcx>§typeck_results: &'tcx TypeckResults<'tcx>§thir: &'p Thir<'tcx>§lint_level: HirId§let_source: LetSource§pattern_arena: &'p TypedArena<DeconstructedPat<'p, 'tcx>>§dropless_arena: &'p DroplessArena§error: Result<(), ErrorGuaranteed>Tracks if we encountered an error while checking this body. That the first function to
report it stores it here. Some functions return Result to allow callers to short-circuit
on error, but callers don’t need to store it here again.
Implementations§
Source§impl<'p, 'tcx> MatchVisitor<'p, 'tcx>
impl<'p, 'tcx> MatchVisitor<'p, 'tcx>
fn with_let_source(&mut self, let_source: LetSource, f: impl FnOnce(&mut Self))
fn with_lint_level<T>( &mut self, new_lint_level: LintLevel, f: impl FnOnce(&mut Self) -> T, ) -> T
Sourcefn visit_land(
&mut self,
ex: &'p Expr<'tcx>,
accumulator: &mut Vec<Option<(Span, RefutableFlag)>>,
) -> Result<(), ErrorGuaranteed>
fn visit_land( &mut self, ex: &'p Expr<'tcx>, accumulator: &mut Vec<Option<(Span, RefutableFlag)>>, ) -> Result<(), ErrorGuaranteed>
Visit a nested chain of &&. Used for if-let chains. This must call visit_expr on the
subexpressions we are not handling ourselves.
Sourcefn visit_land_rhs(
&mut self,
ex: &'p Expr<'tcx>,
) -> Result<Option<(Span, RefutableFlag)>, ErrorGuaranteed>
fn visit_land_rhs( &mut self, ex: &'p Expr<'tcx>, ) -> Result<Option<(Span, RefutableFlag)>, ErrorGuaranteed>
Visit the right-hand-side of a &&. Used for if-let chains. Returns Some if the
expression was ultimately a let ... = ..., and None if it was a normal boolean
expression. This must call visit_expr on the subexpressions we are not handling ourselves.
fn lower_pattern( &mut self, cx: &PatCtxt<'p, 'tcx>, pat: &'p Pat<'tcx>, ) -> Result<&'p DeconstructedPat<'p, 'tcx>, ErrorGuaranteed>
Sourcefn is_known_valid_scrutinee(&self, scrutinee: &Expr<'tcx>) -> bool
fn is_known_valid_scrutinee(&self, scrutinee: &Expr<'tcx>) -> bool
Inspects the match scrutinee expression to determine whether the place it evaluates to may hold invalid data.
fn new_cx( &self, refutability: RefutableFlag, whole_match_span: Option<Span>, scrutinee: Option<&Expr<'tcx>>, scrut_span: Span, ) -> PatCtxt<'p, 'tcx>
fn analyze_patterns( &mut self, cx: &PatCtxt<'p, 'tcx>, arms: &[MatchArm<'p, 'tcx>], scrut_ty: Ty<'tcx>, ) -> Result<UsefulnessReport<'p, 'tcx>, ErrorGuaranteed>
fn check_let( &mut self, pat: &'p Pat<'tcx>, scrutinee: Option<ExprId>, span: Span, )
fn check_match( &mut self, scrut: ExprId, arms: &[ArmId], source: MatchSource, expr_span: Span, )
fn check_let_chain( &mut self, chain_refutabilities: Vec<Option<(Span, RefutableFlag)>>, whole_chain_span: Span, )
fn analyze_binding( &mut self, pat: &'p Pat<'tcx>, refutability: RefutableFlag, scrut: Option<&Expr<'tcx>>, ) -> Result<(PatCtxt<'p, 'tcx>, UsefulnessReport<'p, 'tcx>), ErrorGuaranteed>
fn is_let_irrefutable( &mut self, pat: &'p Pat<'tcx>, scrut: Option<&Expr<'tcx>>, ) -> Result<RefutableFlag, ErrorGuaranteed>
fn check_binding_is_irrefutable( &mut self, pat: &'p Pat<'tcx>, origin: &str, scrut: Option<&Expr<'tcx>>, sp: Option<Span>, )
Trait Implementations§
Source§impl<'p, 'tcx> Visitor<'p, 'tcx> for MatchVisitor<'p, 'tcx>
impl<'p, 'tcx> Visitor<'p, 'tcx> for MatchVisitor<'p, 'tcx>
Auto Trait Implementations§
impl<'p, 'tcx> !DynSend for MatchVisitor<'p, 'tcx>
impl<'p, 'tcx> !DynSync for MatchVisitor<'p, 'tcx>
impl<'p, 'tcx> Freeze for MatchVisitor<'p, 'tcx>
impl<'p, 'tcx> !RefUnwindSafe for MatchVisitor<'p, 'tcx>
impl<'p, 'tcx> !Send for MatchVisitor<'p, 'tcx>
impl<'p, 'tcx> !Sync for MatchVisitor<'p, 'tcx>
impl<'p, 'tcx> Unpin for MatchVisitor<'p, 'tcx>
impl<'p, 'tcx> !UnwindSafe for MatchVisitor<'p, 'tcx>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T, R> CollectAndApply<T, R> for T
impl<T, R> CollectAndApply<T, R> for T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<P> IntoQueryParam<P> for P
impl<P> IntoQueryParam<P> for P
fn into_query_param(self) -> P
Source§impl<T> MaybeResult<T> for T
impl<T> MaybeResult<T> for T
Source§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<I, T, U> Upcast<I, U> for Twhere
U: UpcastFrom<I, T>,
impl<I, T, U> Upcast<I, U> for Twhere
U: UpcastFrom<I, T>,
Source§impl<I, T> UpcastFrom<I, T> for T
impl<I, T> UpcastFrom<I, T> for T
fn upcast_from(from: T, _tcx: I) -> T
Source§impl<Tcx, T> Value<Tcx> for Twhere
Tcx: DepContext,
impl<Tcx, T> Value<Tcx> for Twhere
Tcx: DepContext,
default fn from_cycle_error( tcx: Tcx, cycle_error: &CycleError, _guar: ErrorGuaranteed, ) -> T
Source§impl<T> WithSubscriber for T
impl<T> WithSubscriber for T
Source§fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
Source§fn with_current_subscriber(self) -> WithDispatch<Self>
fn with_current_subscriber(self) -> WithDispatch<Self>
impl<'a, T> Captures<'a> for Twhere
T: ?Sized,
impl<T> ErasedDestructor for Twhere
T: 'static,
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: 80 bytes