diff options
Diffstat (limited to 'src/librustc_middle/ty/query/on_disk_cache.rs')
| -rw-r--r-- | src/librustc_middle/ty/query/on_disk_cache.rs | 47 |
1 files changed, 31 insertions, 16 deletions
diff --git a/src/librustc_middle/ty/query/on_disk_cache.rs b/src/librustc_middle/ty/query/on_disk_cache.rs index 5374dff4224..c84a7c38d0a 100644 --- a/src/librustc_middle/ty/query/on_disk_cache.rs +++ b/src/librustc_middle/ty/query/on_disk_cache.rs @@ -524,16 +524,39 @@ impl<'a, 'tcx> TyDecoder<'tcx> for CacheDecoder<'a, 'tcx> { let cache_key = ty::CReaderCacheKey { cnum: CrateNum::ReservedForIncrCompCache, pos: shorthand }; - if let Some(&ty) = tcx.rcache.borrow().get(&cache_key) { + if let Some(&ty) = tcx.ty_rcache.borrow().get(&cache_key) { return Ok(ty); } let ty = or_insert_with(self)?; // This may overwrite the entry, but it should overwrite with the same value. - tcx.rcache.borrow_mut().insert_same(cache_key, ty); + tcx.ty_rcache.borrow_mut().insert_same(cache_key, ty); Ok(ty) } + fn cached_predicate_for_shorthand<F>( + &mut self, + shorthand: usize, + or_insert_with: F, + ) -> Result<ty::Predicate<'tcx>, Self::Error> + where + F: FnOnce(&mut Self) -> Result<ty::Predicate<'tcx>, Self::Error>, + { + let tcx = self.tcx(); + + let cache_key = + ty::CReaderCacheKey { cnum: CrateNum::ReservedForIncrCompCache, pos: shorthand }; + + if let Some(&pred) = tcx.pred_rcache.borrow().get(&cache_key) { + return Ok(pred); + } + + let pred = or_insert_with(self)?; + // This may overwrite the entry, but it should overwrite with the same value. + tcx.pred_rcache.borrow_mut().insert_same(cache_key, pred); + Ok(pred) + } + fn with_position<F, R>(&mut self, pos: usize, f: F) -> R where F: FnOnce(&mut Self) -> R, @@ -820,24 +843,16 @@ where } } -impl<'a, 'b, 'c, 'tcx, E> SpecializedEncoder<&'b [(ty::Predicate<'c>, Span)]> - for CacheEncoder<'a, 'tcx, E> +impl<'a, 'b, 'tcx, E> SpecializedEncoder<ty::Predicate<'b>> for CacheEncoder<'a, 'tcx, E> where E: 'a + TyEncoder, { #[inline] - fn specialized_encode( - &mut self, - predicates: &&'b [(ty::Predicate<'c>, Span)], - ) -> Result<(), Self::Error> { - debug_assert!(self.tcx.lift(*predicates).is_some()); - let predicates = unsafe { - std::mem::transmute::< - &&'b [(ty::Predicate<'c>, Span)], - &&'tcx [(ty::Predicate<'tcx>, Span)], - >(predicates) - }; - ty_codec::encode_spanned_predicates(self, predicates, |encoder| { + fn specialized_encode(&mut self, predicate: &ty::Predicate<'b>) -> Result<(), Self::Error> { + debug_assert!(self.tcx.lift(predicate).is_some()); + let predicate = + unsafe { std::mem::transmute::<&ty::Predicate<'b>, &ty::Predicate<'tcx>>(predicate) }; + ty_codec::encode_with_shorthand(self, predicate, |encoder| { &mut encoder.predicate_shorthands }) } |
