Hash spans when interning.
This commit is contained in:
parent
c42a4245cc
commit
d47424b833
3 changed files with 6 additions and 50 deletions
|
@ -110,11 +110,6 @@ where
|
|||
}
|
||||
}
|
||||
|
||||
/// A helper trait so that `Interned` things can cache stable hashes reproducibly.
|
||||
pub trait InternedHashingContext {
|
||||
fn with_def_path_and_no_spans(&mut self, f: impl FnOnce(&mut Self));
|
||||
}
|
||||
|
||||
/// A helper type that you can wrap round your own type in order to automatically
|
||||
/// cache the stable hash on creation and not recompute it whenever the stable hash
|
||||
/// of the type is computed.
|
||||
|
@ -165,7 +160,7 @@ impl<T: Hash> Hash for WithStableHash<T> {
|
|||
}
|
||||
}
|
||||
|
||||
impl<T: HashStable<CTX>, CTX: InternedHashingContext> HashStable<CTX> for WithStableHash<T> {
|
||||
impl<T: HashStable<CTX>, CTX> HashStable<CTX> for WithStableHash<T> {
|
||||
fn hash_stable(&self, hcx: &mut CTX, hasher: &mut StableHasher) {
|
||||
if self.stable_hash == Fingerprint::ZERO || cfg!(debug_assertions) {
|
||||
// No cached hash available. This can only mean that incremental is disabled.
|
||||
|
@ -176,7 +171,7 @@ impl<T: HashStable<CTX>, CTX: InternedHashingContext> HashStable<CTX> for WithSt
|
|||
// otherwise the hashes will differ between cached and non-cached mode.
|
||||
let stable_hash: Fingerprint = {
|
||||
let mut hasher = StableHasher::new();
|
||||
hcx.with_def_path_and_no_spans(|hcx| self.internee.hash_stable(hcx, &mut hasher));
|
||||
self.internee.hash_stable(hcx, &mut hasher);
|
||||
hasher.finish()
|
||||
};
|
||||
if cfg!(debug_assertions) && self.stable_hash != Fingerprint::ZERO {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue