about summary refs log tree commit diff
diff options
context:
space:
mode:
authorvarkor <github@varkor.com>2019-02-19 21:20:45 +0000
committervarkor <github@varkor.com>2019-03-13 23:46:35 +0000
commitb524ade782d20b63b84febbcfe58e2b54bfe7ab8 (patch)
tree09d3b295f2c8c1a3f181a36e90d285928d2fd68c
parent719b0d9849dab698c1ff0630313d068c7d561eae (diff)
downloadrust-b524ade782d20b63b84febbcfe58e2b54bfe7ab8.tar.gz
rust-b524ade782d20b63b84febbcfe58e2b54bfe7ab8.zip
Refactor generic parameter encoder functions
-rw-r--r--src/librustc_metadata/encoder.rs60
1 files changed, 18 insertions, 42 deletions
diff --git a/src/librustc_metadata/encoder.rs b/src/librustc_metadata/encoder.rs
index ce0618d4599..ed1113677d0 100644
--- a/src/librustc_metadata/encoder.rs
+++ b/src/librustc_metadata/encoder.rs
@@ -7,6 +7,7 @@ use rustc::middle::cstore::{LinkagePreference, NativeLibrary,
                             EncodedMetadata, ForeignModule};
 use rustc::hir::def::CtorKind;
 use rustc::hir::def_id::{CrateNum, CRATE_DEF_INDEX, DefIndex, DefId, LocalDefId, LOCAL_CRATE};
+use rustc::hir::GenericParamKind;
 use rustc::hir::map::definitions::DefPathTable;
 use rustc_data_structures::fingerprint::Fingerprint;
 use rustc::middle::dependency_format::Linkage;
@@ -1307,10 +1308,11 @@ impl<'a, 'b: 'a, 'tcx: 'b> IsolatedEncoder<'a, 'b, 'tcx> {
         }
     }
 
-    fn encode_info_for_ty_param(&mut self,
-                                (def_id, Untracked(has_default)): (DefId, Untracked<bool>))
-                                -> Entry<'tcx> {
-        debug!("IsolatedEncoder::encode_info_for_ty_param({:?})", def_id);
+    fn encode_info_for_generic_param(
+        &mut self,
+        (def_id, Untracked(encode_type)): (DefId, Untracked<bool>),
+    ) -> Entry<'tcx> {
+        debug!("IsolatedEncoder::encode_info_for_generic_param({:?})", def_id);
         let tcx = self.tcx;
         Entry {
             kind: EntryKind::Type,
@@ -1321,7 +1323,7 @@ impl<'a, 'b: 'a, 'tcx: 'b> IsolatedEncoder<'a, 'b, 'tcx> {
             stability: None,
             deprecation: None,
 
-            ty: if has_default {
+            ty: if encode_type {
                 Some(self.encode_item_type(def_id))
             } else {
                 None
@@ -1336,29 +1338,6 @@ impl<'a, 'b: 'a, 'tcx: 'b> IsolatedEncoder<'a, 'b, 'tcx> {
         }
     }
 
-    fn encode_info_for_const_param(&mut self, def_id: DefId) -> Entry<'tcx> {
-        debug!("IsolatedEncoder::encode_info_for_const_param({:?})", def_id);
-        let tcx = self.tcx;
-        Entry {
-            kind: EntryKind::Type,
-            visibility: self.lazy(&ty::Visibility::Public),
-            span: self.lazy(&tcx.def_span(def_id)),
-            attributes: LazySeq::empty(),
-            children: LazySeq::empty(),
-            stability: None,
-            deprecation: None,
-
-            ty: Some(self.encode_item_type(def_id)),
-            inherent_impls: LazySeq::empty(),
-            variances: LazySeq::empty(),
-            generics: None,
-            predicates: None,
-            predicates_defined_on: None,
-
-            mir: None,
-        }
-    }
-
     fn encode_info_for_closure(&mut self, def_id: DefId) -> Entry<'tcx> {
         debug!("IsolatedEncoder::encode_info_for_closure({:?})", def_id);
         let tcx = self.tcx;
@@ -1703,20 +1682,17 @@ impl<'a, 'b, 'tcx> IndexBuilder<'a, 'b, 'tcx> {
 
     fn encode_info_for_generics(&mut self, generics: &hir::Generics) {
         for param in &generics.params {
-            match param.kind {
-                hir::GenericParamKind::Lifetime { .. } => {}
-                hir::GenericParamKind::Type { ref default, .. } => {
-                    let def_id = self.tcx.hir().local_def_id_from_hir_id(param.hir_id);
-                    let has_default = Untracked(default.is_some());
-                    let encode_info = IsolatedEncoder::encode_info_for_ty_param;
-                    self.record(def_id, encode_info, (def_id, has_default));
-                }
-                hir::GenericParamKind::Const { .. } => {
-                    let def_id = self.tcx.hir().local_def_id_from_hir_id(param.hir_id);
-                    let encode_info = IsolatedEncoder::encode_info_for_const_param;
-                    self.record(def_id, encode_info, def_id);
-                }
-            }
+            let encode_type = match param.kind {
+                GenericParamKind::Lifetime { .. } => continue,
+                GenericParamKind::Type { ref default, .. } => default.is_some(),
+                GenericParamKind::Const { .. } => true,
+            };
+            let def_id = self.tcx.hir().local_def_id_from_hir_id(param.hir_id);
+            self.record(
+                def_id,
+                IsolatedEncoder::encode_info_for_generic_param,
+                (def_id, Untracked(encode_type)),
+            );
         }
     }