Skip to content

Commit bc96d9d

Browse files
incr.comp.: Implement UseSpecializedXXcodable for DefIndex and DefId.
1 parent c08e03a commit bc96d9d

File tree

1 file changed

+41
-2
lines changed

1 file changed

+41
-2
lines changed

src/librustc/hir/def_id.rs

Lines changed: 41 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
use ty;
1212

1313
use rustc_data_structures::indexed_vec::Idx;
14-
use serialize::{self, Encoder, Decoder};
14+
use serialize::{self, Encoder, Decoder, Decodable, Encodable};
1515

1616
use std::fmt;
1717
use std::u32;
@@ -146,6 +146,20 @@ impl DefIndex {
146146
}
147147
}
148148

149+
impl serialize::UseSpecializedEncodable for DefIndex {
150+
#[inline]
151+
fn default_encode<S: Encoder>(&self, s: &mut S) -> Result<(), S::Error> {
152+
s.emit_u32(self.0)
153+
}
154+
}
155+
156+
impl serialize::UseSpecializedDecodable for DefIndex {
157+
#[inline]
158+
fn default_decode<D: Decoder>(d: &mut D) -> Result<DefIndex, D::Error> {
159+
d.read_u32().map(DefIndex)
160+
}
161+
}
162+
149163
#[derive(Copy, Clone, Eq, PartialEq, Hash)]
150164
pub enum DefIndexAddressSpace {
151165
Low = 0,
@@ -188,7 +202,6 @@ impl fmt::Debug for DefId {
188202
}
189203
}
190204

191-
192205
impl DefId {
193206
/// Make a local `DefId` with the given index.
194207
pub fn local(index: DefIndex) -> DefId {
@@ -199,3 +212,29 @@ impl DefId {
199212
self.krate == LOCAL_CRATE
200213
}
201214
}
215+
216+
impl serialize::UseSpecializedEncodable for DefId {
217+
#[inline]
218+
fn default_encode<S: Encoder>(&self, s: &mut S) -> Result<(), S::Error> {
219+
let DefId {
220+
krate,
221+
index,
222+
} = *self;
223+
224+
krate.encode(s)?;
225+
index.encode(s)
226+
}
227+
}
228+
229+
impl serialize::UseSpecializedDecodable for DefId {
230+
#[inline]
231+
fn default_decode<D: Decoder>(d: &mut D) -> Result<DefId, D::Error> {
232+
let krate = CrateNum::decode(d)?;
233+
let index = DefIndex::decode(d)?;
234+
235+
Ok(DefId {
236+
krate,
237+
index
238+
})
239+
}
240+
}

0 commit comments

Comments
 (0)