Struct rustc_mir_build::thir::pattern::check_match::MatchVisitor
source · struct MatchVisitor<'p, 'tcx> {
tcx: TyCtxt<'tcx>,
param_env: ParamEnv<'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>
§param_env: ParamEnv<'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> Filterable for T
impl<T> Filterable for T
source§fn filterable(
self,
filter_name: &'static str,
) -> RequestFilterDataProvider<T, fn(_: DataRequest<'_>) -> bool>
fn filterable( self, filter_name: &'static str, ) -> RequestFilterDataProvider<T, fn(_: DataRequest<'_>) -> bool>
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<'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: 64 bytes