Skip to content

Commit 972b93b

Browse files
committed
rustc_metadata: use decoder::Metadata instead of &[u8] for Lazy<Table<T>>::get.
1 parent cef4950 commit 972b93b

File tree

2 files changed

+19
-9
lines changed

2 files changed

+19
-9
lines changed

src/librustc_metadata/decoder.rs

+5-5
Original file line numberDiff line numberDiff line change
@@ -132,8 +132,8 @@ impl<'a, 'tcx> Metadata<'a, 'tcx> for (&'a CrateMetadata, TyCtxt<'tcx>) {
132132
}
133133

134134
impl<'a, 'tcx, T: Encodable + Decodable> Lazy<T> {
135-
crate fn decode<M: Metadata<'a, 'tcx>>(self, meta: M) -> T {
136-
let mut dcx = meta.decoder(self.position.get());
135+
crate fn decode<M: Metadata<'a, 'tcx>>(self, metadata: M) -> T {
136+
let mut dcx = metadata.decoder(self.position.get());
137137
dcx.lazy_state = LazyState::NodeStart(self.position);
138138
T::decode(&mut dcx).unwrap()
139139
}
@@ -142,9 +142,9 @@ impl<'a, 'tcx, T: Encodable + Decodable> Lazy<T> {
142142
impl<'a: 'x, 'tcx: 'x, 'x, T: Encodable + Decodable> Lazy<[T]> {
143143
crate fn decode<M: Metadata<'a, 'tcx>>(
144144
self,
145-
meta: M,
145+
metadata: M,
146146
) -> impl ExactSizeIterator<Item = T> + Captures<'a> + Captures<'tcx> + 'x {
147-
let mut dcx = meta.decoder(self.position.get());
147+
let mut dcx = metadata.decoder(self.position.get());
148148
dcx.lazy_state = LazyState::NodeStart(self.position);
149149
(0..self.meta).map(move |_| T::decode(&mut dcx).unwrap())
150150
}
@@ -481,7 +481,7 @@ impl<'a, 'tcx> CrateMetadata {
481481
}
482482

483483
fn maybe_entry(&self, item_id: DefIndex) -> Option<Lazy<Entry<'tcx>>> {
484-
self.root.per_def.entry.get(self.blob.raw_bytes(), item_id)
484+
self.root.per_def.entry.get(self, item_id)
485485
}
486486

487487
fn entry(&self, item_id: DefIndex) -> Entry<'tcx> {

src/librustc_metadata/table.rs

+14-4
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
use crate::decoder::Metadata;
12
use crate::schema::*;
23

34
use rustc::hir::def_id::{DefId, DefIndex};
@@ -158,10 +159,15 @@ impl<T> LazyMeta for Table<T> where Option<T>: FixedSizeEncoding {
158159
impl<T> Lazy<Table<T>> where Option<T>: FixedSizeEncoding {
159160
/// Given the metadata, extract out the value at a particular index (if any).
160161
#[inline(never)]
161-
crate fn get(&self, bytes: &[u8], i: usize) -> Option<T> {
162+
crate fn get<'a, 'tcx, M: Metadata<'a, 'tcx>>(
163+
&self,
164+
metadata: M,
165+
i: usize,
166+
) -> Option<T> {
162167
debug!("Table::lookup: index={:?} len={:?}", i, self.meta);
163168

164-
<Option<T>>::read_from_bytes_at(&bytes[self.position.get()..][..self.meta], i)
169+
let bytes = &metadata.raw_bytes()[self.position.get()..][..self.meta];
170+
<Option<T>>::read_from_bytes_at(bytes, i)
165171
}
166172
}
167173

@@ -201,7 +207,11 @@ impl<T> Lazy<PerDefTable<T>> where Option<T>: FixedSizeEncoding {
201207

202208
/// Given the metadata, extract out the value at a particular DefIndex (if any).
203209
#[inline(never)]
204-
crate fn get(&self, bytes: &[u8], def_index: DefIndex) -> Option<T> {
205-
self.as_table().get(bytes, def_index.index())
210+
crate fn get<'a, 'tcx, M: Metadata<'a, 'tcx>>(
211+
&self,
212+
metadata: M,
213+
def_index: DefIndex,
214+
) -> Option<T> {
215+
self.as_table().get(metadata, def_index.index())
206216
}
207217
}

0 commit comments

Comments
 (0)