From bc96d9d8c9d7c476cfbbb758b1fde6826ae65980 Mon Sep 17 00:00:00 2001 From: Michael Woerister Date: Mon, 13 Nov 2017 15:46:46 +0100 Subject: [PATCH] incr.comp.: Implement UseSpecializedXXcodable for DefIndex and DefId. --- src/librustc/hir/def_id.rs | 43 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 41 insertions(+), 2 deletions(-) diff --git a/src/librustc/hir/def_id.rs b/src/librustc/hir/def_id.rs index 428f154c1b66..58a9ea064104 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(&self, s: &mut S) -> Result<(), S::Error> { + s.emit_u32(self.0) + } +} + +impl serialize::UseSpecializedDecodable for DefIndex { + #[inline] + fn default_decode(d: &mut D) -> Result { + 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(&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: &mut D) -> Result { + let krate = CrateNum::decode(d)?; + let index = DefIndex::decode(d)?; + + Ok(DefId { + krate, + index + }) + } +}