diff options
| author | Eduard-Mihai Burtescu <edy.burt@gmail.com> | 2019-04-14 01:36:08 +0300 |
|---|---|---|
| committer | Eduard-Mihai Burtescu <edy.burt@gmail.com> | 2019-10-15 18:23:51 +0300 |
| commit | 972b93b20e2d21307622eacb812d8a552ecf0f81 (patch) | |
| tree | 5b705cdf04065e3132b4d95bca84ffdc9ce2c919 | |
| parent | cef495028019b5bbb380bfa1d7a10e9e06dbf166 (diff) | |
| download | rust-972b93b20e2d21307622eacb812d8a552ecf0f81.tar.gz rust-972b93b20e2d21307622eacb812d8a552ecf0f81.zip | |
rustc_metadata: use decoder::Metadata instead of &[u8] for Lazy<Table<T>>::get.
| -rw-r--r-- | src/librustc_metadata/decoder.rs | 10 | ||||
| -rw-r--r-- | src/librustc_metadata/table.rs | 18 |
2 files changed, 19 insertions, 9 deletions
diff --git a/src/librustc_metadata/decoder.rs b/src/librustc_metadata/decoder.rs index f1ae0487529..6da936374c7 100644 --- a/src/librustc_metadata/decoder.rs +++ b/src/librustc_metadata/decoder.rs @@ -132,8 +132,8 @@ impl<'a, 'tcx> Metadata<'a, 'tcx> for (&'a CrateMetadata, TyCtxt<'tcx>) { } impl<'a, 'tcx, T: Encodable + Decodable> Lazy<T> { - crate fn decode<M: Metadata<'a, 'tcx>>(self, meta: M) -> T { - let mut dcx = meta.decoder(self.position.get()); + crate fn decode<M: Metadata<'a, 'tcx>>(self, metadata: M) -> T { + let mut dcx = metadata.decoder(self.position.get()); dcx.lazy_state = LazyState::NodeStart(self.position); T::decode(&mut dcx).unwrap() } @@ -142,9 +142,9 @@ impl<'a, 'tcx, T: Encodable + Decodable> Lazy<T> { impl<'a: 'x, 'tcx: 'x, 'x, T: Encodable + Decodable> Lazy<[T]> { crate fn decode<M: Metadata<'a, 'tcx>>( self, - meta: M, + metadata: M, ) -> impl ExactSizeIterator<Item = T> + Captures<'a> + Captures<'tcx> + 'x { - let mut dcx = meta.decoder(self.position.get()); + let mut dcx = metadata.decoder(self.position.get()); dcx.lazy_state = LazyState::NodeStart(self.position); (0..self.meta).map(move |_| T::decode(&mut dcx).unwrap()) } @@ -481,7 +481,7 @@ impl<'a, 'tcx> CrateMetadata { } fn maybe_entry(&self, item_id: DefIndex) -> Option<Lazy<Entry<'tcx>>> { - self.root.per_def.entry.get(self.blob.raw_bytes(), item_id) + self.root.per_def.entry.get(self, item_id) } fn entry(&self, item_id: DefIndex) -> Entry<'tcx> { diff --git a/src/librustc_metadata/table.rs b/src/librustc_metadata/table.rs index c069ea2830c..0585aa1d388 100644 --- a/src/librustc_metadata/table.rs +++ b/src/librustc_metadata/table.rs @@ -1,3 +1,4 @@ +use crate::decoder::Metadata; use crate::schema::*; use rustc::hir::def_id::{DefId, DefIndex}; @@ -158,10 +159,15 @@ impl<T> LazyMeta for Table<T> where Option<T>: FixedSizeEncoding { impl<T> Lazy<Table<T>> where Option<T>: FixedSizeEncoding { /// Given the metadata, extract out the value at a particular index (if any). #[inline(never)] - crate fn get(&self, bytes: &[u8], i: usize) -> Option<T> { + crate fn get<'a, 'tcx, M: Metadata<'a, 'tcx>>( + &self, + metadata: M, + i: usize, + ) -> Option<T> { debug!("Table::lookup: index={:?} len={:?}", i, self.meta); - <Option<T>>::read_from_bytes_at(&bytes[self.position.get()..][..self.meta], i) + let bytes = &metadata.raw_bytes()[self.position.get()..][..self.meta]; + <Option<T>>::read_from_bytes_at(bytes, i) } } @@ -201,7 +207,11 @@ impl<T> Lazy<PerDefTable<T>> where Option<T>: FixedSizeEncoding { /// Given the metadata, extract out the value at a particular DefIndex (if any). #[inline(never)] - crate fn get(&self, bytes: &[u8], def_index: DefIndex) -> Option<T> { - self.as_table().get(bytes, def_index.index()) + crate fn get<'a, 'tcx, M: Metadata<'a, 'tcx>>( + &self, + metadata: M, + def_index: DefIndex, + ) -> Option<T> { + self.as_table().get(metadata, def_index.index()) } } |
