@@ -1293,7 +1293,7 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
12931293 //
12941294 // only generates a single switch.
12951295 let match_pair = candidate. match_pairs . pop ( ) . unwrap ( ) ;
1296- self . create_or_subcandidates ( candidate, & match_pair) ;
1296+ self . create_or_subcandidates ( candidate, match_pair) ;
12971297 split_or_candidate = true ;
12981298 }
12991299 }
@@ -1481,9 +1481,8 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
14811481 return ;
14821482 }
14831483
1484- let match_pairs = mem:: take ( & mut first_candidate. match_pairs ) ;
1485- let ( first_match_pair, remaining_match_pairs) = match_pairs. split_first ( ) . unwrap ( ) ;
1486-
1484+ let first_match_pair = first_candidate. match_pairs . remove ( 0 ) ;
1485+ let remaining_match_pairs = mem:: take ( & mut first_candidate. match_pairs ) ;
14871486 let remainder_start = self . cfg . start_new_block ( ) ;
14881487 // Test the alternatives of this or-pattern.
14891488 self . test_or_pattern ( first_candidate, start_block, remainder_start, first_match_pair) ;
@@ -1527,11 +1526,11 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
15271526 candidate : & mut Candidate < ' pat , ' tcx > ,
15281527 start_block : BasicBlock ,
15291528 otherwise_block : BasicBlock ,
1530- match_pair : & MatchPair < ' pat , ' tcx > ,
1529+ match_pair : MatchPair < ' pat , ' tcx > ,
15311530 ) {
1531+ let or_span = match_pair. pattern . span ;
15321532 self . create_or_subcandidates ( candidate, match_pair) ;
15331533 let mut or_candidate_refs: Vec < _ > = candidate. subcandidates . iter_mut ( ) . collect ( ) ;
1534- let or_span = match_pair. pattern . span ;
15351534 self . match_candidates (
15361535 or_span,
15371536 or_span,
@@ -1548,14 +1547,14 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
15481547 fn create_or_subcandidates < ' pat > (
15491548 & mut self ,
15501549 candidate : & mut Candidate < ' pat , ' tcx > ,
1551- match_pair : & MatchPair < ' pat , ' tcx > ,
1550+ match_pair : MatchPair < ' pat , ' tcx > ,
15521551 ) {
1553- let TestCase :: Or { ref pats } = & match_pair. test_case else { bug ! ( ) } ;
1552+ let TestCase :: Or { pats } = match_pair. test_case else { bug ! ( ) } ;
15541553 debug ! ( "expanding or-pattern: candidate={:#?}\n pats={:#?}" , candidate, pats) ;
15551554 candidate. or_span = Some ( match_pair. pattern . span ) ;
15561555 candidate. subcandidates = pats
1557- . iter ( )
1558- . cloned ( )
1556+ . into_vec ( )
1557+ . into_iter ( )
15591558 . map ( |flat_pat| Candidate :: from_flat_pat ( flat_pat, candidate. has_guard ) )
15601559 . collect ( ) ;
15611560 }
@@ -1569,13 +1568,10 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
15691568 return ;
15701569 }
15711570
1572- let mut can_merge = true ;
1573- for subcandidate in & mut candidate. subcandidates {
1574- // FIXME(or_patterns; matthewjasper) Try to be more aggressive here.
1575- can_merge &=
1576- subcandidate. subcandidates . is_empty ( ) && subcandidate. extra_data . is_empty ( ) ;
1577- }
1578-
1571+ // FIXME(or_patterns; matthewjasper) Try to be more aggressive here.
1572+ let can_merge = candidate. subcandidates . iter ( ) . all ( |subcandidate| {
1573+ subcandidate. subcandidates . is_empty ( ) && subcandidate. extra_data . is_empty ( )
1574+ } ) ;
15791575 if can_merge {
15801576 let any_matches = self . cfg . start_new_block ( ) ;
15811577 let source_info = self . source_info ( candidate. or_span . unwrap ( ) ) ;
0 commit comments