Module rustc_mir_build::build::matches
source Β· Expand description
Code related to match expressions. These are sufficiently complex to warrant their own module and submodules. :) This main module includes the high-level algorithm, the submodules contain the details.
This also includes code for pattern bindings in let
statements and
function parameters.
Modules§
- match_pair π
- simplify πSimplifying Candidates
- test π
- util π
Structs§
- ArmHasGuard π
ArmHasGuard
is a wrapper around a boolean flag. It indicates whether a match arm has a guard expression attached to it. - Ascription πIndicates that the type of
source
must be a subtype of the user-given typeuser_ty
; this is basically a no-op but can influence region inference. - Binding π
- Candidate π
- FlatPat πA pattern in a form suitable for generating code.
- MatchPairTree πNode in a tree of βmatch pairsβ, where each pair consists of a place to be tested, and a test to perform on that place.
- PatternExtraData πData extracted from a pattern that doesnβt affect which branch is taken. Collected during pattern simplification and not mutated later.
- Test πA test to perform to determine which
Candidate
matches a value. - ThenElseArgs πArguments to
Builder::then_else_break_inner
that are usually forwarded to recursive invocations.
Enums§
- DeclareLetBindings πShould lowering a
let
expression also declare its bindings? - EmitStorageLive πUsed by
Builder::bind_matched_candidate_for_arm_body
to determine whether or not to callBuilder::storage_live_binding
to emitStatementKind::StorageLive
. - ScheduleDrops πUsed by
Builder::storage_live_binding
andBuilder::bind_matched_candidate_for_arm_body
to decide whether to schedule drops. - TestBranch πThe branch to be taken after a test.
- TestCase π
- TestKind πSee
Test
for more.
Functions§
- traverse_candidate πA depth-first traversal of the
Candidate
and all of its recursive subcandidates.