about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMichael Woerister <michaelwoerister@posteo>2017-11-13 15:46:46 +0100
committerMichael Woerister <michaelwoerister@posteo>2017-11-13 15:46:46 +0100
commitbc96d9d8c9d7c476cfbbb758b1fde6826ae65980 (patch)
tree57c258de640578fd7f0f594416d31728233722ac
parentc08e03ac46d408a19df480ff5ef7cca4abffdc15 (diff)
downloadrust-bc96d9d8c9d7c476cfbbb758b1fde6826ae65980.tar.gz
rust-bc96d9d8c9d7c476cfbbb758b1fde6826ae65980.zip
incr.comp.: Implement UseSpecializedXXcodable for DefIndex and DefId.
-rw-r--r--src/librustc/hir/def_id.rs43
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
+        })
+    }
+}