Skip to content

Commit 5e66a03

Browse files
committed
Cleanup
1 parent 5d712e7 commit 5e66a03

File tree

3 files changed

+19
-26
lines changed

3 files changed

+19
-26
lines changed

compiler/rustc_pattern_analysis/src/lints.rs

+1-4
Original file line numberDiff line numberDiff line change
@@ -50,9 +50,6 @@ impl<'p, 'tcx> PatternColumn<'p, 'tcx> {
5050
}
5151
}
5252

53-
fn is_empty(&self) -> bool {
54-
self.patterns.is_empty()
55-
}
5653
fn head_ty(&self) -> Option<RevealedTy<'tcx>> {
5754
self.patterns.first().map(|pat| pat.ty())
5855
}
@@ -90,7 +87,7 @@ impl<'p, 'tcx> PatternColumn<'p, 'tcx> {
9087
let relevant_patterns =
9188
self.patterns.iter().filter(|pat| ctor.is_covered_by(pcx, pat.ctor()));
9289
for pat in relevant_patterns {
93-
let specialized = pat.specialize(pcx, ctor, pcx.ctor_sub_tys(ctor));
90+
let specialized = pat.specialize(ctor, pcx.ctor_arity(ctor));
9491
for (subpat, column) in specialized.into_iter().zip(&mut specialized_columns) {
9592
column.expand_and_push(subpat);
9693
}

compiler/rustc_pattern_analysis/src/pat.rs

+5-7
Original file line numberDiff line numberDiff line change
@@ -72,11 +72,10 @@ impl<'p, Cx: TypeCx> DeconstructedPat<'p, Cx> {
7272
/// `other_ctor` can be different from `self.ctor`, but must be covered by it.
7373
pub(crate) fn specialize(
7474
&self,
75-
pcx: &PlaceCtxt<'_, 'p, Cx>,
7675
other_ctor: &Constructor<Cx>,
77-
ctor_sub_tys: &[Cx::Ty],
76+
ctor_arity: usize,
7877
) -> SmallVec<[PatOrWild<'p, Cx>; 2]> {
79-
let wildcard_sub_tys = || ctor_sub_tys.iter().map(|_| Wild).collect();
78+
let wildcard_sub_tys = || (0..ctor_arity).map(|_| Wild).collect();
8079
match (&self.ctor, other_ctor) {
8180
// Return a wildcard for each field of `other_ctor`.
8281
(Wildcard, _) => wildcard_sub_tys(),
@@ -190,13 +189,12 @@ impl<'p, Cx: TypeCx> PatOrWild<'p, Cx> {
190189
/// `other_ctor` can be different from `self.ctor`, but must be covered by it.
191190
pub(crate) fn specialize(
192191
&self,
193-
pcx: &PlaceCtxt<'_, 'p, Cx>,
194192
other_ctor: &Constructor<Cx>,
195-
ctor_sub_tys: &[Cx::Ty],
193+
ctor_arity: usize,
196194
) -> SmallVec<[PatOrWild<'p, Cx>; 2]> {
197195
match self {
198-
Wild => ctor_sub_tys.iter().map(|_| Wild).collect(),
199-
Pat(pat) => pat.specialize(pcx, other_ctor, ctor_sub_tys),
196+
Wild => (0..ctor_arity).map(|_| Wild).collect(),
197+
Pat(pat) => pat.specialize(other_ctor, ctor_arity),
200198
}
201199
}
202200

compiler/rustc_pattern_analysis/src/usefulness.rs

+13-15
Original file line numberDiff line numberDiff line change
@@ -717,7 +717,7 @@ use std::fmt;
717717

718718
use crate::constructor::{Constructor, ConstructorSet};
719719
use crate::pat::{DeconstructedPat, PatOrWild, WitnessPat};
720-
use crate::{Captures, MatchArm, MatchCtxt, TypeCx, TypedArena};
720+
use crate::{Captures, MatchArm, MatchCtxt, TypeCx};
721721

722722
use self::ValidityConstraint::*;
723723

@@ -869,14 +869,13 @@ impl<'p, Cx: TypeCx> PatStack<'p, Cx> {
869869
/// Only call if `ctor.is_covered_by(self.head().ctor())` is true.
870870
fn pop_head_constructor(
871871
&self,
872-
pcx: &PlaceCtxt<'_, 'p, Cx>,
873872
ctor: &Constructor<Cx>,
874-
ctor_sub_tys: &[Cx::Ty],
873+
ctor_arity: usize,
875874
ctor_is_relevant: bool,
876875
) -> PatStack<'p, Cx> {
877876
// We pop the head pattern and push the new fields extracted from the arguments of
878877
// `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);
880879
new_pats.extend_from_slice(&self.pats[1..]);
881880
// `ctor` is relevant for this row if it is the actual constructor of this row, or if the
882881
// row has a wildcard and `ctor` is relevant for wildcards.
@@ -946,14 +945,13 @@ impl<'p, Cx: TypeCx> MatrixRow<'p, Cx> {
946945
/// Only call if `ctor.is_covered_by(self.head().ctor())` is true.
947946
fn pop_head_constructor(
948947
&self,
949-
pcx: &PlaceCtxt<'_, 'p, Cx>,
950948
ctor: &Constructor<Cx>,
951-
ctor_sub_tys: &[Cx::Ty],
949+
ctor_arity: usize,
952950
ctor_is_relevant: bool,
953951
parent_row: usize,
954952
) -> MatrixRow<'p, Cx> {
955953
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),
957955
parent_row,
958956
is_under_guard: self.is_under_guard,
959957
useful: false,
@@ -1008,7 +1006,6 @@ impl<'p, Cx: TypeCx> Matrix<'p, Cx> {
10081006

10091007
/// Build a new matrix from an iterator of `MatchArm`s.
10101008
fn new(
1011-
wildcard_arena: &'p TypedArena<DeconstructedPat<'p, Cx>>,
10121009
arms: &[MatchArm<'p, Cx>],
10131010
scrut_ty: Cx::Ty,
10141011
scrut_validity: ValidityConstraint,
@@ -1063,11 +1060,12 @@ impl<'p, Cx: TypeCx> Matrix<'p, Cx> {
10631060
ctor: &Constructor<Cx>,
10641061
ctor_is_relevant: bool,
10651062
) -> Matrix<'p, Cx> {
1066-
let tys = pcx.ctor_sub_tys(ctor);
1067-
let new_place_ty = tys.iter().chain(self.place_ty[1..].iter()).copied().collect();
1068-
let new_validity = self.place_validity[0].specialize(ctor);
1069-
let new_place_validity = std::iter::repeat(new_validity)
1070-
.take(ctor.arity(pcx))
1063+
let ctor_sub_tys = pcx.ctor_sub_tys(ctor);
1064+
let arity = ctor_sub_tys.len();
1065+
let new_place_ty = ctor_sub_tys.iter().chain(self.place_ty[1..].iter()).copied().collect();
1066+
let ctor_sub_validity = self.place_validity[0].specialize(ctor);
1067+
let new_place_validity = std::iter::repeat(ctor_sub_validity)
1068+
.take(arity)
10711069
.chain(self.place_validity[1..].iter().copied())
10721070
.collect();
10731071
let mut matrix = Matrix {
@@ -1078,7 +1076,7 @@ impl<'p, Cx: TypeCx> Matrix<'p, Cx> {
10781076
};
10791077
for (i, row) in self.rows().enumerate() {
10801078
if ctor.is_covered_by(pcx, row.head().ctor()) {
1081-
let new_row = row.pop_head_constructor(pcx, ctor, tys, ctor_is_relevant, i);
1079+
let new_row = row.pop_head_constructor(ctor, arity, ctor_is_relevant, i);
10821080
matrix.expand_and_push(new_row);
10831081
}
10841082
}
@@ -1471,7 +1469,7 @@ pub fn compute_match_usefulness<'p, Cx: TypeCx>(
14711469
scrut_ty: Cx::Ty,
14721470
scrut_validity: ValidityConstraint,
14731471
) -> UsefulnessReport<'p, Cx> {
1474-
let mut matrix = Matrix::new(cx.wildcard_arena, arms, scrut_ty, scrut_validity);
1472+
let mut matrix = Matrix::new(arms, scrut_ty, scrut_validity);
14751473
let non_exhaustiveness_witnesses = compute_exhaustiveness_and_usefulness(cx, &mut matrix, true);
14761474

14771475
let non_exhaustiveness_witnesses: Vec<_> = non_exhaustiveness_witnesses.single_column();

0 commit comments

Comments
 (0)