Move a function · rust-lang/rust@5bf50e6

@@ -1624,6 +1624,25 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {

16241624

otherwise_block

16251625

}

162616261627+

/// Given a match-pair that corresponds to an or-pattern, expand each subpattern into a new

1628+

/// subcandidate. Any candidate that has been expanded that way should be passed to

1629+

/// `finalize_or_candidate` after its subcandidates have been processed.

1630+

fn create_or_subcandidates<'pat>(

1631+

&mut self,

1632+

candidate: &mut Candidate<'pat, 'tcx>,

1633+

match_pair: MatchPair<'pat, 'tcx>,

1634+

) {

1635+

let TestCase::Or { pats } = match_pair.test_case else { bug!() };

1636+

debug!("expanding or-pattern: candidate={:#?}\npats={:#?}", candidate, pats);

1637+

candidate.or_span = Some(match_pair.pattern.span);

1638+

candidate.subcandidates = pats

1639+

.into_vec()

1640+

.into_iter()

1641+

.map(|flat_pat| Candidate::from_flat_pat(flat_pat, candidate.has_guard))

1642+

.collect();

1643+

candidate.subcandidates[0].false_edge_start_block = candidate.false_edge_start_block;

1644+

}

1645+16271646

/// Simplify subcandidates and process any leftover match pairs. The candidate should have been

16281647

/// expanded with `create_or_subcandidates`.

16291648

///

@@ -1724,25 +1743,6 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {

17241743

}

17251744

}

172617451727-

/// Given a match-pair that corresponds to an or-pattern, expand each subpattern into a new

1728-

/// subcandidate. Any candidate that has been expanded that way should be passed to

1729-

/// `finalize_or_candidate` after its subcandidates have been processed.

1730-

fn create_or_subcandidates<'pat>(

1731-

&mut self,

1732-

candidate: &mut Candidate<'pat, 'tcx>,

1733-

match_pair: MatchPair<'pat, 'tcx>,

1734-

) {

1735-

let TestCase::Or { pats } = match_pair.test_case else { bug!() };

1736-

debug!("expanding or-pattern: candidate={:#?}\npats={:#?}", candidate, pats);

1737-

candidate.or_span = Some(match_pair.pattern.span);

1738-

candidate.subcandidates = pats

1739-

.into_vec()

1740-

.into_iter()

1741-

.map(|flat_pat| Candidate::from_flat_pat(flat_pat, candidate.has_guard))

1742-

.collect();

1743-

candidate.subcandidates[0].false_edge_start_block = candidate.false_edge_start_block;

1744-

}

1745-17461746

/// Try to merge all of the subcandidates of the given candidate into one. This avoids

17471747

/// exponentially large CFGs in cases like `(1 | 2, 3 | 4, ...)`. The candidate should have been

17481748

/// expanded with `create_or_subcandidates`.