diff options
Diffstat (limited to 'compiler')
| -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) } } |
