Auto merge of #86180 - cjgillot:defmv, r=petrochenkov
Hash DefId in rustc_span. This is mostly just moving code around. Changes are simplifications of unneeded callbacks from rustc_span to rustc_middle. r? `@petrochenkov`
This commit is contained in:
commit
0f6ba39fd8
6 changed files with 56 additions and 71 deletions
|
@ -1,7 +1,7 @@
|
|||
use crate::crate_disambiguator::CrateDisambiguator;
|
||||
use crate::HashStableContext;
|
||||
use rustc_data_structures::fingerprint::Fingerprint;
|
||||
use rustc_data_structures::stable_hasher::{HashStable, StableHasher};
|
||||
use rustc_data_structures::stable_hasher::{HashStable, StableHasher, ToStableHashKey};
|
||||
use rustc_data_structures::AtomicRef;
|
||||
use rustc_index::vec::Idx;
|
||||
use rustc_macros::HashStable_Generic;
|
||||
|
@ -308,13 +308,49 @@ impl<D: Decoder> Decodable<D> for LocalDefId {
|
|||
rustc_data_structures::define_id_collections!(LocalDefIdMap, LocalDefIdSet, LocalDefId);
|
||||
|
||||
impl<CTX: HashStableContext> HashStable<CTX> for DefId {
|
||||
#[inline]
|
||||
fn hash_stable(&self, hcx: &mut CTX, hasher: &mut StableHasher) {
|
||||
hcx.hash_def_id(*self, hasher)
|
||||
self.to_stable_hash_key(hcx).hash_stable(hcx, hasher);
|
||||
}
|
||||
}
|
||||
|
||||
impl<CTX: HashStableContext> HashStable<CTX> for LocalDefId {
|
||||
#[inline]
|
||||
fn hash_stable(&self, hcx: &mut CTX, hasher: &mut StableHasher) {
|
||||
self.to_stable_hash_key(hcx).hash_stable(hcx, hasher);
|
||||
}
|
||||
}
|
||||
|
||||
impl<CTX: HashStableContext> HashStable<CTX> for CrateNum {
|
||||
#[inline]
|
||||
fn hash_stable(&self, hcx: &mut CTX, hasher: &mut StableHasher) {
|
||||
hcx.hash_crate_num(*self, hasher)
|
||||
self.to_stable_hash_key(hcx).hash_stable(hcx, hasher);
|
||||
}
|
||||
}
|
||||
|
||||
impl<CTX: HashStableContext> ToStableHashKey<CTX> for DefId {
|
||||
type KeyType = DefPathHash;
|
||||
|
||||
#[inline]
|
||||
fn to_stable_hash_key(&self, hcx: &CTX) -> DefPathHash {
|
||||
hcx.def_path_hash(*self)
|
||||
}
|
||||
}
|
||||
|
||||
impl<CTX: HashStableContext> ToStableHashKey<CTX> for LocalDefId {
|
||||
type KeyType = DefPathHash;
|
||||
|
||||
#[inline]
|
||||
fn to_stable_hash_key(&self, hcx: &CTX) -> DefPathHash {
|
||||
hcx.def_path_hash(self.to_def_id())
|
||||
}
|
||||
}
|
||||
|
||||
impl<CTX: HashStableContext> ToStableHashKey<CTX> for CrateNum {
|
||||
type KeyType = DefPathHash;
|
||||
|
||||
#[inline]
|
||||
fn to_stable_hash_key(&self, hcx: &CTX) -> DefPathHash {
|
||||
self.as_def_id().to_stable_hash_key(hcx)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -29,7 +29,7 @@ use crate::symbol::{kw, sym, Symbol};
|
|||
use crate::SESSION_GLOBALS;
|
||||
use crate::{BytePos, CachingSourceMapView, ExpnIdCache, SourceFile, Span, DUMMY_SP};
|
||||
|
||||
use crate::def_id::{CrateNum, DefId, CRATE_DEF_INDEX, LOCAL_CRATE};
|
||||
use crate::def_id::{CrateNum, DefId, DefPathHash, CRATE_DEF_INDEX, LOCAL_CRATE};
|
||||
use rustc_data_structures::fingerprint::Fingerprint;
|
||||
use rustc_data_structures::fx::{FxHashMap, FxHashSet};
|
||||
use rustc_data_structures::stable_hasher::{HashStable, StableHasher};
|
||||
|
@ -1330,9 +1330,12 @@ fn update_disambiguator(expn_id: ExpnId) {
|
|||
}
|
||||
|
||||
impl<'a> crate::HashStableContext for DummyHashStableContext<'a> {
|
||||
fn hash_def_id(&mut self, def_id: DefId, hasher: &mut StableHasher) {
|
||||
def_id.krate.as_u32().hash_stable(self, hasher);
|
||||
def_id.index.as_u32().hash_stable(self, hasher);
|
||||
#[inline]
|
||||
fn def_path_hash(&self, def_id: DefId) -> DefPathHash {
|
||||
DefPathHash(Fingerprint::new(
|
||||
def_id.krate.as_u32().into(),
|
||||
def_id.index.as_u32().into(),
|
||||
))
|
||||
}
|
||||
|
||||
fn expn_id_cache() -> &'static LocalKey<ExpnIdCache> {
|
||||
|
@ -1345,9 +1348,6 @@ fn update_disambiguator(expn_id: ExpnId) {
|
|||
&CACHE
|
||||
}
|
||||
|
||||
fn hash_crate_num(&mut self, krate: CrateNum, hasher: &mut StableHasher) {
|
||||
krate.as_u32().hash_stable(self, hasher);
|
||||
}
|
||||
fn hash_spans(&self) -> bool {
|
||||
true
|
||||
}
|
||||
|
|
|
@ -40,7 +40,7 @@ pub use hygiene::SyntaxContext;
|
|||
use hygiene::Transparency;
|
||||
pub use hygiene::{DesugaringKind, ExpnData, ExpnId, ExpnKind, ForLoopLoc, MacroKind};
|
||||
pub mod def_id;
|
||||
use def_id::{CrateNum, DefId, LOCAL_CRATE};
|
||||
use def_id::{CrateNum, DefId, DefPathHash, LOCAL_CRATE};
|
||||
pub mod lev_distance;
|
||||
mod span_encoding;
|
||||
pub use span_encoding::{Span, DUMMY_SP};
|
||||
|
@ -1928,13 +1928,12 @@ fn lookup_line(lines: &[BytePos], pos: BytePos) -> isize {
|
|||
/// This is a hack to allow using the [`HashStable_Generic`] derive macro
|
||||
/// instead of implementing everything in rustc_middle.
|
||||
pub trait HashStableContext {
|
||||
fn hash_def_id(&mut self, _: DefId, hasher: &mut StableHasher);
|
||||
fn def_path_hash(&self, def_id: DefId) -> DefPathHash;
|
||||
/// Obtains a cache for storing the `Fingerprint` of an `ExpnId`.
|
||||
/// This method allows us to have multiple `HashStableContext` implementations
|
||||
/// that hash things in a different way, without the results of one polluting
|
||||
/// the cache of the other.
|
||||
fn expn_id_cache() -> &'static LocalKey<ExpnIdCache>;
|
||||
fn hash_crate_num(&mut self, _: CrateNum, hasher: &mut StableHasher);
|
||||
fn hash_spans(&self) -> bool;
|
||||
fn span_data_to_lines_and_cols(
|
||||
&mut self,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue