rustc_mir_build::build

Module 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§

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 type user_ty; this is basically a no-op but can influence region inference.
  • Binding πŸ”’
  • BuiltMatchTree πŸ”’
    The result of generating MIR for a pattern-matching expression. Each input branch/arm/pattern gives rise to an output MatchTreeBranch. If one of the patterns matches, we branch to the corresponding success_block. If none of the patterns matches, we branch to otherwise_block.
  • Candidate πŸ”’
    Candidates are a generalization of (a) top-level match arms, and (b) sub-branches of or-patterns, allowing the match-lowering process to handle them both in a mostly-uniform way. For example, the list of candidates passed to Builder::match_candidates will often contain a mixture of top-level candidates and or-pattern subcandidates.
  • FlatPat πŸ”’
    A pattern in a form suitable for lowering the match tree, with all irrefutable patterns simplified away, and or-patterns sorted to the end.
  • 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.
  • MatchTreeBranch πŸ”’
    A branch in the output of match lowering.
  • A sub-branch in the output of match lowering. Match lowering has generated MIR code that will branch to success_block when the matched value matches the corresponding pattern. If there is a guard, its failure must continue to otherwise_block, which will resume testing patterns.
  • 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§

Functions§

  • A depth-first traversal of the Candidate and all of its recursive subcandidates.