diff options
| author | Yuki Okushi <huyuumi.dev@gmail.com> | 2021-01-05 09:52:44 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-01-05 09:52:44 +0900 |
| commit | 598d189e9bc99be0808b41c9427490a12cdf930d (patch) | |
| tree | 13e98185c931d7c432c541ed8a4e275468fad1d0 | |
| parent | faf8beddef859bbb387a24c536505d833c3821a5 (diff) | |
| parent | af7134e7de793ea3bba30bc350daef76ea9de755 (diff) | |
| download | rust-598d189e9bc99be0808b41c9427490a12cdf930d.tar.gz rust-598d189e9bc99be0808b41c9427490a12cdf930d.zip | |
Rollup merge of #80643 - LingMan:unwrap, r=oli-obk
Move variable into the only branch where it is relevant At the `if` branch `filter` (the `let` binding) is `None` iff `filter` (the parameter) was `None`. We can branch on the parameter, move the binding into the `if`, and the complexity of handling `Option<Option<_>` largely dissolves. `@rustbot` modify labels +C-cleanup +T-compiler Note: I have no idea how hot this code is. If this method frequently gets called with a `None` filter, there might be a small perf improvement.
| -rw-r--r-- | compiler/rustc_metadata/src/rmeta/decoder.rs | 15 |
1 files changed, 7 insertions, 8 deletions
diff --git a/compiler/rustc_metadata/src/rmeta/decoder.rs b/compiler/rustc_metadata/src/rmeta/decoder.rs index c94893bb3a2..6e381fd2965 100644 --- a/compiler/rustc_metadata/src/rmeta/decoder.rs +++ b/compiler/rustc_metadata/src/rmeta/decoder.rs @@ -1341,15 +1341,14 @@ impl<'a, 'tcx> CrateMetadataRef<'a> { return &[]; } - // Do a reverse lookup beforehand to avoid touching the crate_num - // hash map in the loop below. - let filter = match filter.map(|def_id| self.reverse_translate_def_id(def_id)) { - Some(Some(def_id)) => Some((def_id.krate.as_u32(), def_id.index)), - Some(None) => return &[], - None => None, - }; + if let Some(def_id) = filter { + // Do a reverse lookup beforehand to avoid touching the crate_num + // hash map in the loop below. + let filter = match self.reverse_translate_def_id(def_id) { + Some(def_id) => (def_id.krate.as_u32(), def_id.index), + None => return &[], + }; - if let Some(filter) = filter { if let Some(impls) = self.trait_impls.get(&filter) { tcx.arena.alloc_from_iter( impls.decode(self).map(|(idx, simplified_self_ty)| { |
