Make a newtype for DefPathHash so they are not confused with content hashes
This commit is contained in:
parent
f89d8d1844
commit
59ebe8e115
@ -36,7 +36,7 @@
|
||||
pub struct DefPathTable {
|
||||
index_to_key: [Vec<DefKey>; 2],
|
||||
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
|
||||
@ -57,7 +57,7 @@ impl DefPathTable {
|
||||
|
||||
fn allocate(&mut self,
|
||||
key: DefKey,
|
||||
def_path_hash: Fingerprint,
|
||||
def_path_hash: DefPathHash,
|
||||
address_space: DefIndexAddressSpace)
|
||||
-> DefIndex {
|
||||
let index = {
|
||||
@ -81,7 +81,7 @@ pub fn def_key(&self, index: DefIndex) -> DefKey {
|
||||
}
|
||||
|
||||
#[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()]
|
||||
[index.as_array_index()]
|
||||
}
|
||||
@ -148,8 +148,8 @@ fn decode<D: Decoder>(d: &mut D) -> Result<DefPathTable, D::Error> {
|
||||
let index_to_key_lo: 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_hi: Vec<Fingerprint> = Decodable::decode(d)?;
|
||||
let def_path_hashes_lo: Vec<DefPathHash> = 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 def_path_hashes = [def_path_hashes_lo, def_path_hashes_hi];
|
||||
@ -216,7 +216,7 @@ pub struct 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();
|
||||
|
||||
// We hash a 0u8 here to disambiguate between regular DefPath hashes,
|
||||
@ -224,17 +224,17 @@ fn compute_stable_hash(&self, parent_hash: Fingerprint) -> Fingerprint {
|
||||
0u8.hash(&mut hasher);
|
||||
parent_hash.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();
|
||||
// Disambiguate this from a regular DefPath hash,
|
||||
// see compute_stable_hash() above.
|
||||
1u8.hash(&mut hasher);
|
||||
crate_name.hash(&mut hasher);
|
||||
crate_disambiguator.hash(&mut hasher);
|
||||
hasher.finish()
|
||||
DefPathHash(hasher.finish())
|
||||
}
|
||||
}
|
||||
|
||||
@ -372,6 +372,12 @@ pub enum DefPathData {
|
||||
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 {
|
||||
/// Create new empty definition map.
|
||||
pub fn new() -> Definitions {
|
||||
@ -404,7 +410,7 @@ pub fn def_key(&self, index: DefIndex) -> DefKey {
|
||||
}
|
||||
|
||||
#[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)
|
||||
}
|
||||
|
||||
|
@ -13,7 +13,7 @@
|
||||
use self::collector::NodeCollector;
|
||||
pub use self::def_collector::{DefCollector, MacroInvocationData};
|
||||
pub use self::definitions::{Definitions, DefKey, DefPath, DefPathData,
|
||||
DisambiguatedDefPathData};
|
||||
DisambiguatedDefPathData, DefPathHash};
|
||||
|
||||
use dep_graph::{DepGraph, DepNode};
|
||||
|
||||
|
@ -10,6 +10,7 @@
|
||||
|
||||
use hir;
|
||||
use hir::def_id::DefId;
|
||||
use hir::map::DefPathHash;
|
||||
use ich::{self, CachingCodemapView};
|
||||
use session::config::DebugInfoLevel::NoDebugInfo;
|
||||
use ty;
|
||||
@ -115,7 +116,7 @@ pub fn tcx(&self) -> ty::TyCtxt<'a, 'tcx, 'tcx> {
|
||||
}
|
||||
|
||||
#[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)
|
||||
}
|
||||
|
||||
|
@ -281,7 +281,7 @@ fn retrace_path(&self,
|
||||
-> Option<DefId>;
|
||||
fn def_key(&self, def: DefId) -> DefKey;
|
||||
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 item_children(&self, did: DefId) -> Vec<def::Export>;
|
||||
fn load_macro(&self, did: DefId, sess: &Session) -> LoadedMacro;
|
||||
@ -412,8 +412,8 @@ fn def_key(&self, def: DefId) -> DefKey { bug!("def_key") }
|
||||
fn def_path(&self, def: DefId) -> hir_map::DefPath {
|
||||
bug!("relative_def_path")
|
||||
}
|
||||
fn def_path_hash(&self, def: DefId) -> ich::Fingerprint {
|
||||
bug!("wa")
|
||||
fn def_path_hash(&self, def: DefId) -> hir_map::DefPathHash {
|
||||
bug!("def_path_hash")
|
||||
}
|
||||
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") }
|
||||
|
@ -19,7 +19,7 @@
|
||||
use hir::{map as hir_map, FreevarMap, TraitMap};
|
||||
use hir::def::{Def, CtorKind, ExportMap};
|
||||
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::lang_items::{FnTraitLangItem, FnMutTraitLangItem, FnOnceTraitLangItem};
|
||||
use middle::privacy::AccessLevels;
|
||||
@ -2244,7 +2244,7 @@ pub fn def_path(self, id: DefId) -> hir_map::DefPath {
|
||||
}
|
||||
|
||||
#[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() {
|
||||
self.hir.definitions().def_path_hash(def_id.index)
|
||||
} else {
|
||||
|
@ -11,6 +11,7 @@
|
||||
//! This module contains TypeVariants and its major components
|
||||
|
||||
use hir::def_id::DefId;
|
||||
use hir::map::DefPathHash;
|
||||
|
||||
use middle::region;
|
||||
use ty::subst::Substs;
|
||||
@ -29,7 +30,6 @@
|
||||
use serialize;
|
||||
|
||||
use hir;
|
||||
use ich;
|
||||
|
||||
use self::InferTy::*;
|
||||
use self::TypeVariants::*;
|
||||
@ -850,7 +850,7 @@ pub fn item_name(&self) -> 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.
|
||||
// The DefId isn't but the `deterministic_hash` of the corresponding
|
||||
// DefPath is.
|
||||
@ -885,7 +885,7 @@ pub fn item_name(&self) -> 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)
|
||||
}
|
||||
|
||||
|
@ -9,7 +9,7 @@
|
||||
// except according to those terms.
|
||||
|
||||
use hir::def_id::DefId;
|
||||
use ich::Fingerprint;
|
||||
use hir::map::DefPathHash;
|
||||
use traits::specialization_graph;
|
||||
use ty::fast_reject;
|
||||
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
|
||||
/// 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
|
||||
@ -95,7 +95,7 @@ pub fn new(def_id: DefId,
|
||||
unsafety: hir::Unsafety,
|
||||
paren_sugar: bool,
|
||||
has_default_impl: bool,
|
||||
def_path_hash: Fingerprint)
|
||||
def_path_hash: DefPathHash)
|
||||
-> TraitDef {
|
||||
TraitDef {
|
||||
def_id,
|
||||
|
@ -32,6 +32,7 @@
|
||||
use rustc::dep_graph::DepNode;
|
||||
use rustc::hir;
|
||||
use rustc::hir::def_id::{CRATE_DEF_INDEX, DefId};
|
||||
use rustc::hir::map::DefPathHash;
|
||||
use rustc::hir::itemlikevisit::ItemLikeVisitor;
|
||||
use rustc::ich::{Fingerprint, StableHashingContext};
|
||||
use rustc::ty::TyCtxt;
|
||||
@ -218,7 +219,7 @@ fn compute_and_store_ich_for_trait_impls(&mut self, krate: &'tcx hir::Crate)
|
||||
{
|
||||
let tcx = self.hcx.tcx();
|
||||
|
||||
let mut impls: Vec<(Fingerprint, Fingerprint)> = krate
|
||||
let mut impls: Vec<(DefPathHash, Fingerprint)> = krate
|
||||
.trait_impls
|
||||
.iter()
|
||||
.map(|(&trait_id, impls)| {
|
||||
|
@ -17,7 +17,6 @@
|
||||
ExternCrate, NativeLibrary, MetadataLoader, LinkMeta,
|
||||
LinkagePreference, LoadedMacro, EncodedMetadata};
|
||||
use rustc::hir::def;
|
||||
use rustc::ich;
|
||||
use rustc::middle::lang_items;
|
||||
use rustc::session::Session;
|
||||
use rustc::ty::{self, TyCtxt};
|
||||
@ -25,7 +24,7 @@
|
||||
use rustc::hir::def_id::{CrateNum, DefId, DefIndex, CRATE_DEF_INDEX, LOCAL_CRATE};
|
||||
|
||||
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_back::PanicStrategy;
|
||||
|
||||
@ -334,7 +333,7 @@ fn def_path(&self, def: DefId) -> DefPath {
|
||||
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)
|
||||
}
|
||||
|
||||
|
@ -14,9 +14,8 @@
|
||||
use schema::*;
|
||||
|
||||
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::ich;
|
||||
|
||||
use rustc::middle::cstore::LinkagePreference;
|
||||
use rustc::hir::def::{self, Def, CtorKind};
|
||||
@ -1109,7 +1108,7 @@ pub fn def_path(&self, id: DefIndex) -> DefPath {
|
||||
}
|
||||
|
||||
#[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)
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user