Skip to content

Commit 96b6b19

Browse files
committed
rustc_metadata: use decoder::Metadata instead of &[u8] for Lazy<Table<T>>::get.
1 parent 050276a commit 96b6b19

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
@@ -130,8 +130,8 @@ impl<'a, 'tcx> Metadata<'a, 'tcx> for (&'a CrateMetadata, TyCtxt<'a, 'tcx, 'tcx>
130130
}
131131

132132
impl<'a, 'tcx: 'a, T: Encodable + Decodable> Lazy<T> {
133-
pub fn decode<M: Metadata<'a, 'tcx>>(self, meta: M) -> T {
134-
let mut dcx = meta.decoder(self.position.get());
133+
pub fn decode<M: Metadata<'a, 'tcx>>(self, metadata: M) -> T {
134+
let mut dcx = metadata.decoder(self.position.get());
135135
dcx.lazy_state = LazyState::NodeStart(self.position);
136136
T::decode(&mut dcx).unwrap()
137137
}
@@ -140,9 +140,9 @@ impl<'a, 'tcx: 'a, T: Encodable + Decodable> Lazy<T> {
140140
impl<'a, 'tcx: 'a, T: Encodable + Decodable> Lazy<[T]> {
141141
pub fn decode<M: Metadata<'a, 'tcx>>(
142142
self,
143-
meta: M,
143+
metadata: M,
144144
) -> impl Iterator<Item = T> + Captures<'tcx> + 'a {
145-
let mut dcx = meta.decoder(self.position.get());
145+
let mut dcx = metadata.decoder(self.position.get());
146146
dcx.lazy_state = LazyState::NodeStart(self.position);
147147
(0..self.meta).map(move |_| T::decode(&mut dcx).unwrap())
148148
}
@@ -498,7 +498,7 @@ impl<'a, 'tcx> CrateMetadata {
498498

499499
fn maybe_entry(&self, item_id: DefIndex) -> Option<Lazy<Entry<'tcx>>> {
500500
assert!(!self.is_proc_macro(item_id));
501-
self.root.per_def.entry.get(self.blob.raw_bytes(), item_id)
501+
self.root.per_def.entry.get(self, item_id)
502502
}
503503

504504
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, DefIndexAddressSpace};
@@ -159,10 +160,15 @@ impl<T> LazyMeta for Table<T> where Option<T>: FixedSizeEncoding {
159160
impl<T> Lazy<Table<T>> where Option<T>: FixedSizeEncoding {
160161
/// Given the metadata, extract out the value at a particular index (if any).
161162
#[inline(never)]
162-
pub fn get(&self, bytes: &[u8], i: usize) -> Option<T> {
163+
pub fn get<'a, 'tcx, M: Metadata<'a, 'tcx>>(
164+
&self,
165+
metadata: M,
166+
i: usize,
167+
) -> Option<T> {
163168
debug!("Table::lookup: index={:?} len={:?}", i, self.meta);
164169

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

@@ -220,8 +226,12 @@ impl<T> Lazy<PerDefTable<T>> where Option<T>: FixedSizeEncoding {
220226

221227
/// Given the metadata, extract out the value at a particular DefIndex (if any).
222228
#[inline(never)]
223-
pub fn get(&self, bytes: &[u8], def_index: DefIndex) -> Option<T> {
229+
pub fn get<'a, 'tcx, M: Metadata<'a, 'tcx>>(
230+
&self,
231+
metadata: M,
232+
def_index: DefIndex,
233+
) -> Option<T> {
224234
self.table_for_space(def_index.address_space())
225-
.get(bytes, def_index.as_array_index())
235+
.get(metadata, def_index.as_array_index())
226236
}
227237
}

0 commit comments

Comments
 (0)