Allow to create definitions inside the query system.
This commit is contained in:
parent
3dcb616888
commit
43bb31b954
23 changed files with 260 additions and 150 deletions
|
@ -39,6 +39,17 @@ impl Key for () {
|
|||
}
|
||||
}
|
||||
|
||||
impl Key for ty::RawLocalDefId {
|
||||
#[inline(always)]
|
||||
fn query_crate_is_local(&self) -> bool {
|
||||
true
|
||||
}
|
||||
|
||||
fn default_span(&self, _: TyCtxt<'_>) -> Span {
|
||||
DUMMY_SP
|
||||
}
|
||||
}
|
||||
|
||||
impl<'tcx> Key for ty::InstanceDef<'tcx> {
|
||||
#[inline(always)]
|
||||
fn query_crate_is_local(&self) -> bool {
|
||||
|
|
|
@ -653,12 +653,11 @@ impl<'a, 'tcx> Decodable<CacheDecoder<'a, 'tcx>> for ExpnId {
|
|||
#[cfg(debug_assertions)]
|
||||
{
|
||||
use rustc_data_structures::stable_hasher::{HashStable, StableHasher};
|
||||
let mut hcx = decoder.tcx.create_stable_hashing_context();
|
||||
let mut hasher = StableHasher::new();
|
||||
hcx.while_hashing_spans(true, |hcx| {
|
||||
expn_id.expn_data().hash_stable(hcx, &mut hasher)
|
||||
let local_hash: u64 = decoder.tcx.with_stable_hashing_context(|mut hcx| {
|
||||
let mut hasher = StableHasher::new();
|
||||
expn_id.expn_data().hash_stable(&mut hcx, &mut hasher);
|
||||
hasher.finish()
|
||||
});
|
||||
let local_hash: u64 = hasher.finish();
|
||||
debug_assert_eq!(hash.local_hash(), local_hash);
|
||||
}
|
||||
|
||||
|
|
|
@ -291,11 +291,12 @@ macro_rules! define_queries {
|
|||
.and_then(|def_id| tcx.opt_def_kind(def_id))
|
||||
};
|
||||
let hash = || {
|
||||
let mut hcx = tcx.create_stable_hashing_context();
|
||||
let mut hasher = StableHasher::new();
|
||||
std::mem::discriminant(&kind).hash_stable(&mut hcx, &mut hasher);
|
||||
key.hash_stable(&mut hcx, &mut hasher);
|
||||
hasher.finish::<u64>()
|
||||
tcx.with_stable_hashing_context(|mut hcx|{
|
||||
let mut hasher = StableHasher::new();
|
||||
std::mem::discriminant(&kind).hash_stable(&mut hcx, &mut hasher);
|
||||
key.hash_stable(&mut hcx, &mut hasher);
|
||||
hasher.finish::<u64>()
|
||||
})
|
||||
};
|
||||
|
||||
QueryStackFrame::new(name, description, span, def_kind, hash)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue