diff options
| author | Michael Woerister <michaelwoerister@posteo> | 2017-11-13 15:46:46 +0100 |
|---|---|---|
| committer | Michael Woerister <michaelwoerister@posteo> | 2017-11-13 15:46:46 +0100 |
| commit | bc96d9d8c9d7c476cfbbb758b1fde6826ae65980 (patch) | |
| tree | 57c258de640578fd7f0f594416d31728233722ac | |
| parent | c08e03ac46d408a19df480ff5ef7cca4abffdc15 (diff) | |
| download | rust-bc96d9d8c9d7c476cfbbb758b1fde6826ae65980.tar.gz rust-bc96d9d8c9d7c476cfbbb758b1fde6826ae65980.zip | |
incr.comp.: Implement UseSpecializedXXcodable for DefIndex and DefId.
| -rw-r--r-- | src/librustc/hir/def_id.rs | 43 |
1 files changed, 41 insertions, 2 deletions
diff --git a/src/librustc/hir/def_id.rs b/src/librustc/hir/def_id.rs index 428f154c1b6..58a9ea06410 100644 --- a/src/librustc/hir/def_id.rs +++ b/src/librustc/hir/def_id.rs @@ -11,7 +11,7 @@ use ty; use rustc_data_structures::indexed_vec::Idx; -use serialize::{self, Encoder, Decoder}; +use serialize::{self, Encoder, Decoder, Decodable, Encodable}; use std::fmt; use std::u32; @@ -146,6 +146,20 @@ impl DefIndex { } } +impl serialize::UseSpecializedEncodable for DefIndex { + #[inline] + fn default_encode<S: Encoder>(&self, s: &mut S) -> Result<(), S::Error> { + s.emit_u32(self.0) + } +} + +impl serialize::UseSpecializedDecodable for DefIndex { + #[inline] + fn default_decode<D: Decoder>(d: &mut D) -> Result<DefIndex, D::Error> { + d.read_u32().map(DefIndex) + } +} + #[derive(Copy, Clone, Eq, PartialEq, Hash)] pub enum DefIndexAddressSpace { Low = 0, @@ -188,7 +202,6 @@ impl fmt::Debug for DefId { } } - impl DefId { /// Make a local `DefId` with the given index. pub fn local(index: DefIndex) -> DefId { @@ -199,3 +212,29 @@ impl DefId { self.krate == LOCAL_CRATE } } + +impl serialize::UseSpecializedEncodable for DefId { + #[inline] + fn default_encode<S: Encoder>(&self, s: &mut S) -> Result<(), S::Error> { + let DefId { + krate, + index, + } = *self; + + krate.encode(s)?; + index.encode(s) + } +} + +impl serialize::UseSpecializedDecodable for DefId { + #[inline] + fn default_decode<D: Decoder>(d: &mut D) -> Result<DefId, D::Error> { + let krate = CrateNum::decode(d)?; + let index = DefIndex::decode(d)?; + + Ok(DefId { + krate, + index + }) + } +} |
