@@ -33,15 +33,19 @@ pub(crate) struct PatternColumn<'p, 'tcx> {
33
33
34
34
impl < ' p , ' tcx > PatternColumn < ' p , ' tcx > {
35
35
pub ( crate ) fn new ( arms : & [ MatchArm < ' p , ' tcx > ] ) -> Self {
36
- let mut patterns = Vec :: with_capacity ( arms. len ( ) ) ;
36
+ let patterns = Vec :: with_capacity ( arms. len ( ) ) ;
37
+ let mut column = PatternColumn { patterns } ;
37
38
for arm in arms {
38
- if arm. pat . is_or_pat ( ) {
39
- patterns. extend ( arm. pat . flatten_or_pat ( ) )
40
- } else {
41
- patterns. push ( arm. pat )
42
- }
39
+ column. expand_and_push ( arm. pat ) ;
40
+ }
41
+ column
42
+ }
43
+ fn expand_and_push ( & mut self , pat : & ' p DeconstructedPat < ' p , ' tcx > ) {
44
+ if pat. is_or_pat ( ) {
45
+ self . patterns . extend ( pat. flatten_or_pat ( ) )
46
+ } else {
47
+ self . patterns . push ( pat)
43
48
}
44
- Self { patterns }
45
49
}
46
50
47
51
fn is_empty ( & self ) -> bool {
@@ -87,11 +91,7 @@ impl<'p, 'tcx> PatternColumn<'p, 'tcx> {
87
91
for pat in relevant_patterns {
88
92
let specialized = pat. specialize ( pcx, ctor, ctor_sub_tys) ;
89
93
for ( subpat, column) in specialized. iter ( ) . zip ( & mut specialized_columns) {
90
- if subpat. is_or_pat ( ) {
91
- column. patterns . extend ( subpat. flatten_or_pat ( ) )
92
- } else {
93
- column. patterns . push ( subpat)
94
- }
94
+ column. expand_and_push ( subpat) ;
95
95
}
96
96
}
97
97
0 commit comments