@@ -869,14 +869,13 @@ impl<'p, Cx: TypeCx> PatStack<'p, Cx> {
869
869
/// Only call if `ctor.is_covered_by(self.head().ctor())` is true.
870
870
fn pop_head_constructor (
871
871
& self ,
872
- pcx : & PlaceCtxt < ' _ , ' p , Cx > ,
873
872
ctor : & Constructor < Cx > ,
874
- ctor_sub_tys : & [ Cx :: Ty ] ,
873
+ ctor_arity : usize ,
875
874
ctor_is_relevant : bool ,
876
875
) -> PatStack < ' p , Cx > {
877
876
// We pop the head pattern and push the new fields extracted from the arguments of
878
877
// `self.head()`.
879
- let mut new_pats = self . head ( ) . specialize ( pcx , ctor, ctor_sub_tys ) ;
878
+ let mut new_pats = self . head ( ) . specialize ( ctor, ctor_arity ) ;
880
879
new_pats. extend_from_slice ( & self . pats [ 1 ..] ) ;
881
880
// `ctor` is relevant for this row if it is the actual constructor of this row, or if the
882
881
// row has a wildcard and `ctor` is relevant for wildcards.
@@ -946,14 +945,13 @@ impl<'p, Cx: TypeCx> MatrixRow<'p, Cx> {
946
945
/// Only call if `ctor.is_covered_by(self.head().ctor())` is true.
947
946
fn pop_head_constructor (
948
947
& self ,
949
- pcx : & PlaceCtxt < ' _ , ' p , Cx > ,
950
948
ctor : & Constructor < Cx > ,
951
- ctor_sub_tys : & [ Cx :: Ty ] ,
949
+ ctor_arity : usize ,
952
950
ctor_is_relevant : bool ,
953
951
parent_row : usize ,
954
952
) -> MatrixRow < ' p , Cx > {
955
953
MatrixRow {
956
- pats : self . pats . pop_head_constructor ( pcx , ctor, ctor_sub_tys , ctor_is_relevant) ,
954
+ pats : self . pats . pop_head_constructor ( ctor, ctor_arity , ctor_is_relevant) ,
957
955
parent_row,
958
956
is_under_guard : self . is_under_guard ,
959
957
useful : false ,
@@ -1063,11 +1061,12 @@ impl<'p, Cx: TypeCx> Matrix<'p, Cx> {
1063
1061
ctor_is_relevant : bool ,
1064
1062
) -> Matrix < ' p , Cx > {
1065
1063
let ctor_sub_tys = pcx. ctor_sub_tys ( ctor) ;
1064
+ let arity = ctor_sub_tys. len ( ) ;
1066
1065
let specialized_place_ty =
1067
1066
ctor_sub_tys. iter ( ) . chain ( self . place_ty [ 1 ..] . iter ( ) ) . copied ( ) . collect ( ) ;
1068
1067
let ctor_sub_validity = self . place_validity [ 0 ] . specialize ( ctor) ;
1069
1068
let specialized_place_validity = std:: iter:: repeat ( ctor_sub_validity)
1070
- . take ( ctor . arity ( pcx ) )
1069
+ . take ( arity)
1071
1070
. chain ( self . place_validity [ 1 ..] . iter ( ) . copied ( ) )
1072
1071
. collect ( ) ;
1073
1072
let mut matrix = Matrix {
@@ -1078,8 +1077,7 @@ impl<'p, Cx: TypeCx> Matrix<'p, Cx> {
1078
1077
} ;
1079
1078
for ( i, row) in self . rows ( ) . enumerate ( ) {
1080
1079
if ctor. is_covered_by ( pcx, row. head ( ) . ctor ( ) ) {
1081
- let new_row =
1082
- row. pop_head_constructor ( pcx, ctor, ctor_sub_tys, ctor_is_relevant, i) ;
1080
+ let new_row = row. pop_head_constructor ( ctor, arity, ctor_is_relevant, i) ;
1083
1081
matrix. expand_and_push ( new_row) ;
1084
1082
}
1085
1083
}
0 commit comments