Make a newtype for DefPathHash so they are not confused with content hashes

This commit is contained in:
Michael Woerister 2017-05-31 13:54:38 +02:00
parent f89d8d1844
commit 59ebe8e115
10 changed files with 36 additions and 30 deletions

View file

@ -36,7 +36,7 @@ use util::nodemap::NodeMap;
pub struct DefPathTable { pub struct DefPathTable {
index_to_key: [Vec<DefKey>; 2], index_to_key: [Vec<DefKey>; 2],
key_to_index: FxHashMap<DefKey, DefIndex>, key_to_index: FxHashMap<DefKey, DefIndex>,
def_path_hashes: [Vec<Fingerprint>; 2], def_path_hashes: [Vec<DefPathHash>; 2],
} }
// Unfortunately we have to provide a manual impl of Clone because of the // Unfortunately we have to provide a manual impl of Clone because of the
@ -57,7 +57,7 @@ impl DefPathTable {
fn allocate(&mut self, fn allocate(&mut self,
key: DefKey, key: DefKey,
def_path_hash: Fingerprint, def_path_hash: DefPathHash,
address_space: DefIndexAddressSpace) address_space: DefIndexAddressSpace)
-> DefIndex { -> DefIndex {
let index = { let index = {
@ -81,7 +81,7 @@ impl DefPathTable {
} }
#[inline(always)] #[inline(always)]
pub fn def_path_hash(&self, index: DefIndex) -> Fingerprint { pub fn def_path_hash(&self, index: DefIndex) -> DefPathHash {
self.def_path_hashes[index.address_space().index()] self.def_path_hashes[index.address_space().index()]
[index.as_array_index()] [index.as_array_index()]
} }
@ -148,8 +148,8 @@ impl Decodable for DefPathTable {
let index_to_key_lo: Vec<DefKey> = Decodable::decode(d)?; let index_to_key_lo: Vec<DefKey> = Decodable::decode(d)?;
let index_to_key_hi: Vec<DefKey> = Decodable::decode(d)?; let index_to_key_hi: Vec<DefKey> = Decodable::decode(d)?;
let def_path_hashes_lo: Vec<Fingerprint> = Decodable::decode(d)?; let def_path_hashes_lo: Vec<DefPathHash> = Decodable::decode(d)?;
let def_path_hashes_hi: Vec<Fingerprint> = Decodable::decode(d)?; let def_path_hashes_hi: Vec<DefPathHash> = Decodable::decode(d)?;
let index_to_key = [index_to_key_lo, index_to_key_hi]; let index_to_key = [index_to_key_lo, index_to_key_hi];
let def_path_hashes = [def_path_hashes_lo, def_path_hashes_hi]; let def_path_hashes = [def_path_hashes_lo, def_path_hashes_hi];
@ -216,7 +216,7 @@ pub struct DefKey {
} }
impl DefKey { impl DefKey {
fn compute_stable_hash(&self, parent_hash: Fingerprint) -> Fingerprint { fn compute_stable_hash(&self, parent_hash: DefPathHash) -> DefPathHash {
let mut hasher = StableHasher::new(); let mut hasher = StableHasher::new();
// We hash a 0u8 here to disambiguate between regular DefPath hashes, // We hash a 0u8 here to disambiguate between regular DefPath hashes,
@ -224,17 +224,17 @@ impl DefKey {
0u8.hash(&mut hasher); 0u8.hash(&mut hasher);
parent_hash.hash(&mut hasher); parent_hash.hash(&mut hasher);
self.disambiguated_data.hash(&mut hasher); self.disambiguated_data.hash(&mut hasher);
hasher.finish() DefPathHash(hasher.finish())
} }
fn root_parent_stable_hash(crate_name: &str, crate_disambiguator: &str) -> Fingerprint { fn root_parent_stable_hash(crate_name: &str, crate_disambiguator: &str) -> DefPathHash {
let mut hasher = StableHasher::new(); let mut hasher = StableHasher::new();
// Disambiguate this from a regular DefPath hash, // Disambiguate this from a regular DefPath hash,
// see compute_stable_hash() above. // see compute_stable_hash() above.
1u8.hash(&mut hasher); 1u8.hash(&mut hasher);
crate_name.hash(&mut hasher); crate_name.hash(&mut hasher);
crate_disambiguator.hash(&mut hasher); crate_disambiguator.hash(&mut hasher);
hasher.finish() DefPathHash(hasher.finish())
} }
} }
@ -372,6 +372,12 @@ pub enum DefPathData {
Typeof, Typeof,
} }
#[derive(Copy, Clone, Hash, PartialEq, Eq, PartialOrd, Ord, Debug,
RustcEncodable, RustcDecodable)]
pub struct DefPathHash(pub Fingerprint);
impl_stable_hash_for!(tuple_struct DefPathHash { fingerprint });
impl Definitions { impl Definitions {
/// Create new empty definition map. /// Create new empty definition map.
pub fn new() -> Definitions { pub fn new() -> Definitions {
@ -404,7 +410,7 @@ impl Definitions {
} }
#[inline(always)] #[inline(always)]
pub fn def_path_hash(&self, index: DefIndex) -> Fingerprint { pub fn def_path_hash(&self, index: DefIndex) -> DefPathHash {
self.table.def_path_hash(index) self.table.def_path_hash(index)
} }

View file

@ -13,7 +13,7 @@ use self::MapEntry::*;
use self::collector::NodeCollector; use self::collector::NodeCollector;
pub use self::def_collector::{DefCollector, MacroInvocationData}; pub use self::def_collector::{DefCollector, MacroInvocationData};
pub use self::definitions::{Definitions, DefKey, DefPath, DefPathData, pub use self::definitions::{Definitions, DefKey, DefPath, DefPathData,
DisambiguatedDefPathData}; DisambiguatedDefPathData, DefPathHash};
use dep_graph::{DepGraph, DepNode}; use dep_graph::{DepGraph, DepNode};

View file

@ -10,6 +10,7 @@
use hir; use hir;
use hir::def_id::DefId; use hir::def_id::DefId;
use hir::map::DefPathHash;
use ich::{self, CachingCodemapView}; use ich::{self, CachingCodemapView};
use session::config::DebugInfoLevel::NoDebugInfo; use session::config::DebugInfoLevel::NoDebugInfo;
use ty; use ty;
@ -115,7 +116,7 @@ impl<'a, 'tcx: 'a> StableHashingContext<'a, 'tcx> {
} }
#[inline] #[inline]
pub fn def_path_hash(&mut self, def_id: DefId) -> ich::Fingerprint { pub fn def_path_hash(&mut self, def_id: DefId) -> DefPathHash {
self.tcx.def_path_hash(def_id) self.tcx.def_path_hash(def_id)
} }

View file

@ -281,7 +281,7 @@ pub trait CrateStore {
-> Option<DefId>; -> Option<DefId>;
fn def_key(&self, def: DefId) -> DefKey; fn def_key(&self, def: DefId) -> DefKey;
fn def_path(&self, def: DefId) -> hir_map::DefPath; fn def_path(&self, def: DefId) -> hir_map::DefPath;
fn def_path_hash(&self, def: DefId) -> ich::Fingerprint; fn def_path_hash(&self, def: DefId) -> hir_map::DefPathHash;
fn struct_field_names(&self, def: DefId) -> Vec<ast::Name>; fn struct_field_names(&self, def: DefId) -> Vec<ast::Name>;
fn item_children(&self, did: DefId) -> Vec<def::Export>; fn item_children(&self, did: DefId) -> Vec<def::Export>;
fn load_macro(&self, did: DefId, sess: &Session) -> LoadedMacro; fn load_macro(&self, did: DefId, sess: &Session) -> LoadedMacro;
@ -412,8 +412,8 @@ impl CrateStore for DummyCrateStore {
fn def_path(&self, def: DefId) -> hir_map::DefPath { fn def_path(&self, def: DefId) -> hir_map::DefPath {
bug!("relative_def_path") bug!("relative_def_path")
} }
fn def_path_hash(&self, def: DefId) -> ich::Fingerprint { fn def_path_hash(&self, def: DefId) -> hir_map::DefPathHash {
bug!("wa") bug!("def_path_hash")
} }
fn struct_field_names(&self, def: DefId) -> Vec<ast::Name> { bug!("struct_field_names") } fn struct_field_names(&self, def: DefId) -> Vec<ast::Name> { bug!("struct_field_names") }
fn item_children(&self, did: DefId) -> Vec<def::Export> { bug!("item_children") } fn item_children(&self, did: DefId) -> Vec<def::Export> { bug!("item_children") }

View file

@ -19,7 +19,7 @@ use dep_graph::DepNode;
use hir::{map as hir_map, FreevarMap, TraitMap}; use hir::{map as hir_map, FreevarMap, TraitMap};
use hir::def::{Def, CtorKind, ExportMap}; use hir::def::{Def, CtorKind, ExportMap};
use hir::def_id::{CrateNum, DefId, DefIndex, CRATE_DEF_INDEX, LOCAL_CRATE}; use hir::def_id::{CrateNum, DefId, DefIndex, CRATE_DEF_INDEX, LOCAL_CRATE};
use ich::{self, StableHashingContext}; use ich::StableHashingContext;
use middle::const_val::ConstVal; use middle::const_val::ConstVal;
use middle::lang_items::{FnTraitLangItem, FnMutTraitLangItem, FnOnceTraitLangItem}; use middle::lang_items::{FnTraitLangItem, FnMutTraitLangItem, FnOnceTraitLangItem};
use middle::privacy::AccessLevels; use middle::privacy::AccessLevels;
@ -2244,7 +2244,7 @@ impl<'a, 'gcx, 'tcx> TyCtxt<'a, 'gcx, 'tcx> {
} }
#[inline] #[inline]
pub fn def_path_hash(self, def_id: DefId) -> ich::Fingerprint { pub fn def_path_hash(self, def_id: DefId) -> hir_map::DefPathHash {
if def_id.is_local() { if def_id.is_local() {
self.hir.definitions().def_path_hash(def_id.index) self.hir.definitions().def_path_hash(def_id.index)
} else { } else {

View file

@ -11,6 +11,7 @@
//! This module contains TypeVariants and its major components //! This module contains TypeVariants and its major components
use hir::def_id::DefId; use hir::def_id::DefId;
use hir::map::DefPathHash;
use middle::region; use middle::region;
use ty::subst::Substs; use ty::subst::Substs;
@ -29,7 +30,6 @@ use util::nodemap::FxHashMap;
use serialize; use serialize;
use hir; use hir;
use ich;
use self::InferTy::*; use self::InferTy::*;
use self::TypeVariants::*; use self::TypeVariants::*;
@ -850,7 +850,7 @@ impl<'a, 'tcx, 'gcx> ExistentialProjection<'tcx> {
self.item_name // safe to skip the binder to access a name self.item_name // safe to skip the binder to access a name
} }
pub fn sort_key(&self, tcx: TyCtxt<'a, 'gcx, 'tcx>) -> (ich::Fingerprint, InternedString) { pub fn sort_key(&self, tcx: TyCtxt<'a, 'gcx, 'tcx>) -> (DefPathHash, InternedString) {
// We want something here that is stable across crate boundaries. // We want something here that is stable across crate boundaries.
// The DefId isn't but the `deterministic_hash` of the corresponding // The DefId isn't but the `deterministic_hash` of the corresponding
// DefPath is. // DefPath is.
@ -885,7 +885,7 @@ impl<'a, 'tcx, 'gcx> PolyExistentialProjection<'tcx> {
self.skip_binder().item_name() self.skip_binder().item_name()
} }
pub fn sort_key(&self, tcx: TyCtxt<'a, 'gcx, 'tcx>) -> (ich::Fingerprint, InternedString) { pub fn sort_key(&self, tcx: TyCtxt<'a, 'gcx, 'tcx>) -> (DefPathHash, InternedString) {
self.skip_binder().sort_key(tcx) self.skip_binder().sort_key(tcx)
} }

View file

@ -9,7 +9,7 @@
// except according to those terms. // except according to those terms.
use hir::def_id::DefId; use hir::def_id::DefId;
use ich::Fingerprint; use hir::map::DefPathHash;
use traits::specialization_graph; use traits::specialization_graph;
use ty::fast_reject; use ty::fast_reject;
use ty::fold::TypeFoldable; use ty::fold::TypeFoldable;
@ -33,7 +33,7 @@ pub struct TraitDef {
/// The ICH of this trait's DefPath, cached here so it doesn't have to be /// The ICH of this trait's DefPath, cached here so it doesn't have to be
/// recomputed all the time. /// recomputed all the time.
pub def_path_hash: Fingerprint, pub def_path_hash: DefPathHash,
} }
// We don't store the list of impls in a flat list because each cached list of // We don't store the list of impls in a flat list because each cached list of
@ -95,7 +95,7 @@ impl<'a, 'gcx, 'tcx> TraitDef {
unsafety: hir::Unsafety, unsafety: hir::Unsafety,
paren_sugar: bool, paren_sugar: bool,
has_default_impl: bool, has_default_impl: bool,
def_path_hash: Fingerprint) def_path_hash: DefPathHash)
-> TraitDef { -> TraitDef {
TraitDef { TraitDef {
def_id, def_id,

View file

@ -32,6 +32,7 @@ use std::hash::Hash;
use rustc::dep_graph::DepNode; use rustc::dep_graph::DepNode;
use rustc::hir; use rustc::hir;
use rustc::hir::def_id::{CRATE_DEF_INDEX, DefId}; use rustc::hir::def_id::{CRATE_DEF_INDEX, DefId};
use rustc::hir::map::DefPathHash;
use rustc::hir::itemlikevisit::ItemLikeVisitor; use rustc::hir::itemlikevisit::ItemLikeVisitor;
use rustc::ich::{Fingerprint, StableHashingContext}; use rustc::ich::{Fingerprint, StableHashingContext};
use rustc::ty::TyCtxt; use rustc::ty::TyCtxt;
@ -218,7 +219,7 @@ impl<'a, 'tcx: 'a> ComputeItemHashesVisitor<'a, 'tcx> {
{ {
let tcx = self.hcx.tcx(); let tcx = self.hcx.tcx();
let mut impls: Vec<(Fingerprint, Fingerprint)> = krate let mut impls: Vec<(DefPathHash, Fingerprint)> = krate
.trait_impls .trait_impls
.iter() .iter()
.map(|(&trait_id, impls)| { .map(|(&trait_id, impls)| {

View file

@ -17,7 +17,6 @@ use rustc::middle::cstore::{CrateStore, CrateSource, LibSource, DepKind,
ExternCrate, NativeLibrary, MetadataLoader, LinkMeta, ExternCrate, NativeLibrary, MetadataLoader, LinkMeta,
LinkagePreference, LoadedMacro, EncodedMetadata}; LinkagePreference, LoadedMacro, EncodedMetadata};
use rustc::hir::def; use rustc::hir::def;
use rustc::ich;
use rustc::middle::lang_items; use rustc::middle::lang_items;
use rustc::session::Session; use rustc::session::Session;
use rustc::ty::{self, TyCtxt}; use rustc::ty::{self, TyCtxt};
@ -25,7 +24,7 @@ use rustc::ty::maps::Providers;
use rustc::hir::def_id::{CrateNum, DefId, DefIndex, CRATE_DEF_INDEX, LOCAL_CRATE}; use rustc::hir::def_id::{CrateNum, DefId, DefIndex, CRATE_DEF_INDEX, LOCAL_CRATE};
use rustc::dep_graph::{DepNode, GlobalMetaDataKind}; use rustc::dep_graph::{DepNode, GlobalMetaDataKind};
use rustc::hir::map::{DefKey, DefPath, DisambiguatedDefPathData}; use rustc::hir::map::{DefKey, DefPath, DisambiguatedDefPathData, DefPathHash};
use rustc::util::nodemap::{NodeSet, DefIdMap}; use rustc::util::nodemap::{NodeSet, DefIdMap};
use rustc_back::PanicStrategy; use rustc_back::PanicStrategy;
@ -334,7 +333,7 @@ impl CrateStore for cstore::CStore {
self.get_crate_data(def.krate).def_path(def.index) self.get_crate_data(def.krate).def_path(def.index)
} }
fn def_path_hash(&self, def: DefId) -> ich::Fingerprint { fn def_path_hash(&self, def: DefId) -> DefPathHash {
self.get_crate_data(def.krate).def_path_hash(def.index) self.get_crate_data(def.krate).def_path_hash(def.index)
} }

View file

@ -14,9 +14,8 @@ use cstore::{self, CrateMetadata, MetadataBlob, NativeLibrary};
use schema::*; use schema::*;
use rustc::dep_graph::{DepGraph, DepNode, GlobalMetaDataKind}; use rustc::dep_graph::{DepGraph, DepNode, GlobalMetaDataKind};
use rustc::hir::map::{DefKey, DefPath, DefPathData}; use rustc::hir::map::{DefKey, DefPath, DefPathData, DefPathHash};
use rustc::hir; use rustc::hir;
use rustc::ich;
use rustc::middle::cstore::LinkagePreference; use rustc::middle::cstore::LinkagePreference;
use rustc::hir::def::{self, Def, CtorKind}; use rustc::hir::def::{self, Def, CtorKind};
@ -1109,7 +1108,7 @@ impl<'a, 'tcx> CrateMetadata {
} }
#[inline] #[inline]
pub fn def_path_hash(&self, index: DefIndex) -> ich::Fingerprint { pub fn def_path_hash(&self, index: DefIndex) -> DefPathHash {
self.def_path_table.def_path_hash(index) self.def_path_table.def_path_hash(index)
} }