diff options
| author | bors <bors@rust-lang.org> | 2021-03-13 15:11:25 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2021-03-13 15:11:25 +0000 |
| commit | 56f74c52c1bb627ada01992787116054bf1e66e9 (patch) | |
| tree | 0ecb6d9e4e7a5b280ef77bfe54d234f03df72a48 | |
| parent | 32dce353dec5f9069c941d4cd0c059ecc67b7c2b (diff) | |
| parent | adcbe49b16dff960600b5d54171d38d6b556d228 (diff) | |
| download | rust-56f74c52c1bb627ada01992787116054bf1e66e9.tar.gz rust-56f74c52c1bb627ada01992787116054bf1e66e9.zip | |
Auto merge of #83069 - tgnottingham:simplify-query-cache-iter, r=cjgillot
rustc_query_system: simplify QueryCache::iter Minor cleanup to reduce a small amount of complexity and code bloat. Reduces the number of mono items in rustc_query_impl by 15%.
| -rw-r--r-- | compiler/rustc_query_system/src/query/caches.rs | 35 | ||||
| -rw-r--r-- | compiler/rustc_query_system/src/query/plumbing.rs | 4 |
2 files changed, 17 insertions, 22 deletions
diff --git a/compiler/rustc_query_system/src/query/caches.rs b/compiler/rustc_query_system/src/query/caches.rs index ec71c868580..001bf3b216b 100644 --- a/compiler/rustc_query_system/src/query/caches.rs +++ b/compiler/rustc_query_system/src/query/caches.rs @@ -49,12 +49,11 @@ pub trait QueryCache: QueryStorage { index: DepNodeIndex, ) -> Self::Stored; - fn iter<R, L>( + fn iter<R>( &self, - shards: &Sharded<L>, - get_shard: impl Fn(&mut L) -> &mut Self::Sharded, + shards: &Sharded<Self::Sharded>, f: impl for<'a> FnOnce( - Box<dyn Iterator<Item = (&'a Self::Key, &'a Self::Value, DepNodeIndex)> + 'a>, + &'a mut dyn Iterator<Item = (&'a Self::Key, &'a Self::Value, DepNodeIndex)>, ) -> R, ) -> R; } @@ -125,16 +124,14 @@ where value } - fn iter<R, L>( + fn iter<R>( &self, - shards: &Sharded<L>, - get_shard: impl Fn(&mut L) -> &mut Self::Sharded, - f: impl for<'a> FnOnce(Box<dyn Iterator<Item = (&'a K, &'a V, DepNodeIndex)> + 'a>) -> R, + shards: &Sharded<Self::Sharded>, + f: impl for<'a> FnOnce(&'a mut dyn Iterator<Item = (&'a K, &'a V, DepNodeIndex)>) -> R, ) -> R { - let mut shards = shards.lock_shards(); - let mut shards: Vec<_> = shards.iter_mut().map(|shard| get_shard(shard)).collect(); - let results = shards.iter_mut().flat_map(|shard| shard.iter()).map(|(k, v)| (k, &v.0, v.1)); - f(Box::new(results)) + let shards = shards.lock_shards(); + let mut results = shards.iter().flat_map(|shard| shard.iter()).map(|(k, v)| (k, &v.0, v.1)); + f(&mut results) } } @@ -210,15 +207,13 @@ where &value.0 } - fn iter<R, L>( + fn iter<R>( &self, - shards: &Sharded<L>, - get_shard: impl Fn(&mut L) -> &mut Self::Sharded, - f: impl for<'a> FnOnce(Box<dyn Iterator<Item = (&'a K, &'a V, DepNodeIndex)> + 'a>) -> R, + shards: &Sharded<Self::Sharded>, + f: impl for<'a> FnOnce(&'a mut dyn Iterator<Item = (&'a K, &'a V, DepNodeIndex)>) -> R, ) -> R { - let mut shards = shards.lock_shards(); - let mut shards: Vec<_> = shards.iter_mut().map(|shard| get_shard(shard)).collect(); - let results = shards.iter_mut().flat_map(|shard| shard.iter()).map(|(k, v)| (k, &v.0, v.1)); - f(Box::new(results)) + let shards = shards.lock_shards(); + let mut results = shards.iter().flat_map(|shard| shard.iter()).map(|(k, v)| (k, &v.0, v.1)); + f(&mut results) } } diff --git a/compiler/rustc_query_system/src/query/plumbing.rs b/compiler/rustc_query_system/src/query/plumbing.rs index 0050670b338..c3e92b87c27 100644 --- a/compiler/rustc_query_system/src/query/plumbing.rs +++ b/compiler/rustc_query_system/src/query/plumbing.rs @@ -76,10 +76,10 @@ impl<C: QueryCache> QueryCacheStore<C> { pub fn iter_results<R>( &self, f: impl for<'a> FnOnce( - Box<dyn Iterator<Item = (&'a C::Key, &'a C::Value, DepNodeIndex)> + 'a>, + &'a mut dyn Iterator<Item = (&'a C::Key, &'a C::Value, DepNodeIndex)>, ) -> R, ) -> R { - self.cache.iter(&self.shards, |shard| &mut *shard, f) + self.cache.iter(&self.shards, f) } } |
