diff options
| author | Mazdak Farrokhzad <twingoow@gmail.com> | 2019-12-19 23:09:33 +0100 |
|---|---|---|
| committer | Mazdak Farrokhzad <twingoow@gmail.com> | 2019-12-19 23:09:33 +0100 |
| commit | d63c324a15d45b5509aff685cad565f1bdcddb85 (patch) | |
| tree | 87be993019fd142f9c10c08c79d738ea6947c8f1 | |
| parent | eb020bc245bc51093fc8bbced9c0610d6e23195a (diff) | |
| download | rust-d63c324a15d45b5509aff685cad565f1bdcddb85.tar.gz rust-d63c324a15d45b5509aff685cad565f1bdcddb85.zip | |
`lower_pattern_unadjusted`: extract `lower_tuple_subpats`.
| -rw-r--r-- | src/librustc_mir/hair/pattern/mod.rs | 43 |
1 files changed, 20 insertions, 23 deletions
diff --git a/src/librustc_mir/hair/pattern/mod.rs b/src/librustc_mir/hair/pattern/mod.rs index 7ebef2d9833..4015faf6a90 100644 --- a/src/librustc_mir/hair/pattern/mod.rs +++ b/src/librustc_mir/hair/pattern/mod.rs @@ -556,19 +556,12 @@ impl<'a, 'tcx> PatCtxt<'a, 'tcx> { self.slice_or_array_pattern(pat.span, ty, prefix, slice, suffix) } - hir::PatKind::Tuple(ref subpatterns, ddpos) => { + hir::PatKind::Tuple(ref pats, ddpos) => { let tys = match ty.kind { ty::Tuple(ref tys) => tys, _ => span_bug!(pat.span, "unexpected type for tuple pattern: {:?}", ty), }; - let subpatterns = subpatterns - .iter() - .enumerate_and_adjust(tys.len(), ddpos) - .map(|(i, subpattern)| FieldPat { - field: Field::new(i), - pattern: self.lower_pattern(subpattern) - }) - .collect(); + let subpatterns = self.lower_tuple_subpats(pats, tys.len(), ddpos); PatKind::Leaf { subpatterns } } @@ -609,25 +602,14 @@ impl<'a, 'tcx> PatCtxt<'a, 'tcx> { } } - hir::PatKind::TupleStruct(ref qpath, ref subpatterns, ddpos) => { + hir::PatKind::TupleStruct(ref qpath, ref pats, ddpos) => { let res = self.tables.qpath_res(qpath, pat.hir_id); let adt_def = match ty.kind { ty::Adt(adt_def, _) => adt_def, - _ => span_bug!(pat.span, - "tuple struct pattern not applied to an ADT {:?}", - ty), + _ => span_bug!(pat.span, "tuple struct pattern not applied to an ADT {:?}", ty), }; let variant_def = adt_def.variant_of_res(res); - - let subpatterns = - subpatterns.iter() - .enumerate_and_adjust(variant_def.fields.len(), ddpos) - .map(|(i, field)| FieldPat { - field: Field::new(i), - pattern: self.lower_pattern(field), - }) - .collect(); - + let subpatterns = self.lower_tuple_subpats(pats, variant_def.fields.len(), ddpos); self.lower_variant_or_leaf(res, pat.hir_id, pat.span, ty, subpatterns) } @@ -661,6 +643,21 @@ impl<'a, 'tcx> PatCtxt<'a, 'tcx> { } } + fn lower_tuple_subpats( + &mut self, + pats: &'tcx [P<hir::Pat>], + expected_len: usize, + gap_pos: Option<usize>, + ) -> Vec<FieldPat<'tcx>> { + pats.iter() + .enumerate_and_adjust(expected_len, gap_pos) + .map(|(i, subpattern)| FieldPat { + field: Field::new(i), + pattern: self.lower_pattern(subpattern) + }) + .collect() + } + fn lower_patterns(&mut self, pats: &'tcx [P<hir::Pat>]) -> Vec<Pat<'tcx>> { pats.iter().map(|p| self.lower_pattern(p)).collect() } |
