diff options
| author | Nadrieril <nadrieril+git@gmail.com> | 2019-11-18 15:47:51 +0000 |
|---|---|---|
| committer | Nadrieril <nadrieril+git@gmail.com> | 2019-11-18 15:49:29 +0000 |
| commit | 1425ae1154f3541a32e9ca607c09ce50cfb1298e (patch) | |
| tree | 6f316b806e2889aaf7b4d050abae53badc9bdffd /src | |
| parent | 2079ae3a52db9c3f2022892b8473e6eb1e0f1656 (diff) | |
| download | rust-1425ae1154f3541a32e9ca607c09ce50cfb1298e.tar.gz rust-1425ae1154f3541a32e9ca607c09ce50cfb1298e.zip | |
Tweak diagnostics code
Diffstat (limited to 'src')
| -rw-r--r-- | src/librustc_mir/hair/pattern/_match.rs | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/src/librustc_mir/hair/pattern/_match.rs b/src/librustc_mir/hair/pattern/_match.rs index a6afea22881..5e7a7f01e7a 100644 --- a/src/librustc_mir/hair/pattern/_match.rs +++ b/src/librustc_mir/hair/pattern/_match.rs @@ -969,19 +969,21 @@ impl<'tcx> Constructor<'tcx> { } VarLen(prefix, _) => { let mut prefix: Vec<_> = subpatterns.by_ref().take(prefix as usize).collect(); - let mut suffix: Vec<_> = subpatterns.collect(); if slice.array_len.is_some() { // Improves diagnostics a bit: if the type is a known-size array, instead // of reporting `[x, _, .., _, y]`, we prefer to report `[x, .., y]`. // This is incorrect if the size is not known, since `[_, ..]` captures // arrays of lengths `>= 1` whereas `[..]` captures any length. - while !suffix.is_empty() && suffix.first().unwrap().is_wildcard() { - suffix.remove(0); - } while !prefix.is_empty() && prefix.last().unwrap().is_wildcard() { prefix.pop(); } } + let suffix: Vec<_> = if slice.array_len.is_some() { + // Same as above. + subpatterns.skip_while(Pat::is_wildcard).collect() + } else { + subpatterns.collect() + }; let wild = Pat::wildcard_from_ty(ty); PatKind::Slice { prefix, slice: Some(wild), suffix } } |
