rustc: use LocalDefId instead of DefIndex for query keys.
This commit is contained in:
parent
6724d584b8
commit
e11dd47503
@ -63,7 +63,7 @@ use crate::ty::subst::SubstsRef;
|
||||
use crate::ty::{self, ParamEnvAnd, Ty, TyCtxt};
|
||||
|
||||
use rustc_data_structures::stable_hasher::{HashStable, StableHasher};
|
||||
use rustc_hir::def_id::{CrateNum, DefId, DefIndex, CRATE_DEF_INDEX};
|
||||
use rustc_hir::def_id::{CrateNum, DefId, LocalDefId, CRATE_DEF_INDEX};
|
||||
use rustc_hir::HirId;
|
||||
use rustc_span::symbol::Symbol;
|
||||
use std::fmt;
|
||||
@ -413,19 +413,19 @@ impl<'tcx> DepNodeParams<'tcx> for DefId {
|
||||
}
|
||||
}
|
||||
|
||||
impl<'tcx> DepNodeParams<'tcx> for DefIndex {
|
||||
impl<'tcx> DepNodeParams<'tcx> for LocalDefId {
|
||||
const CAN_RECONSTRUCT_QUERY_KEY: bool = true;
|
||||
|
||||
fn to_fingerprint(&self, tcx: TyCtxt<'_>) -> Fingerprint {
|
||||
tcx.hir().definitions().def_path_hash(*self).0
|
||||
self.to_def_id().to_fingerprint(tcx)
|
||||
}
|
||||
|
||||
fn to_debug_str(&self, tcx: TyCtxt<'tcx>) -> String {
|
||||
tcx.def_path_str(DefId::local(*self))
|
||||
self.to_def_id().to_debug_str(tcx)
|
||||
}
|
||||
|
||||
fn recover(tcx: TyCtxt<'tcx>, dep_node: &DepNode) -> Option<Self> {
|
||||
dep_node.extract_def_id(tcx).map(|id| id.index)
|
||||
dep_node.extract_def_id(tcx).map(|id| id.to_local())
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -11,7 +11,7 @@ use crate::ty::query::queries;
|
||||
use crate::ty::query::QueryDescription;
|
||||
use crate::ty::subst::SubstsRef;
|
||||
use crate::ty::{self, ParamEnvAnd, Ty, TyCtxt};
|
||||
use rustc_hir::def_id::{CrateNum, DefId, DefIndex};
|
||||
use rustc_hir::def_id::{CrateNum, DefId, LocalDefId};
|
||||
|
||||
use rustc_span::symbol::Symbol;
|
||||
use std::borrow::Cow;
|
||||
@ -791,7 +791,7 @@ rustc_queries! {
|
||||
query specializes(_: (DefId, DefId)) -> bool {
|
||||
desc { "computing whether impls specialize one another" }
|
||||
}
|
||||
query in_scope_traits_map(_: DefIndex)
|
||||
query in_scope_traits_map(_: LocalDefId)
|
||||
-> Option<&'tcx FxHashMap<ItemLocalId, StableVec<TraitCandidate>>> {
|
||||
eval_always
|
||||
desc { "traits in scope at a block" }
|
||||
@ -948,15 +948,15 @@ rustc_queries! {
|
||||
query resolve_lifetimes(_: CrateNum) -> &'tcx ResolveLifetimes {
|
||||
desc { "resolving lifetimes" }
|
||||
}
|
||||
query named_region_map(_: DefIndex) ->
|
||||
query named_region_map(_: LocalDefId) ->
|
||||
Option<&'tcx FxHashMap<ItemLocalId, Region>> {
|
||||
desc { "looking up a named region" }
|
||||
}
|
||||
query is_late_bound_map(_: DefIndex) ->
|
||||
query is_late_bound_map(_: LocalDefId) ->
|
||||
Option<&'tcx FxHashSet<ItemLocalId>> {
|
||||
desc { "testing if a region is late bound" }
|
||||
}
|
||||
query object_lifetime_defaults_map(_: DefIndex)
|
||||
query object_lifetime_defaults_map(_: LocalDefId)
|
||||
-> Option<&'tcx FxHashMap<ItemLocalId, Vec<ObjectLifetimeDefault>>> {
|
||||
desc { "looking up lifetime defaults for a region" }
|
||||
}
|
||||
|
@ -55,7 +55,7 @@ use rustc_data_structures::stable_hasher::{
|
||||
use rustc_data_structures::sync::{self, Lock, Lrc, WorkerLocal};
|
||||
use rustc_hir as hir;
|
||||
use rustc_hir::def::{DefKind, Res};
|
||||
use rustc_hir::def_id::{CrateNum, DefId, DefIdMap, DefIdSet, DefIndex, LOCAL_CRATE};
|
||||
use rustc_hir::def_id::{CrateNum, DefId, DefIdMap, DefIdSet, LocalDefId, LOCAL_CRATE};
|
||||
use rustc_hir::{HirId, Node, TraitCandidate};
|
||||
use rustc_hir::{ItemKind, ItemLocalId, ItemLocalMap, ItemLocalSet};
|
||||
use rustc_index::vec::{Idx, IndexVec};
|
||||
@ -958,7 +958,7 @@ pub struct GlobalCtxt<'tcx> {
|
||||
|
||||
/// Map indicating what traits are in scope for places where this
|
||||
/// is relevant; generated by resolve.
|
||||
trait_map: FxHashMap<DefIndex, FxHashMap<ItemLocalId, StableVec<TraitCandidate>>>,
|
||||
trait_map: FxHashMap<LocalDefId, FxHashMap<ItemLocalId, StableVec<TraitCandidate>>>,
|
||||
|
||||
/// Export map produced by name resolution.
|
||||
export_map: FxHashMap<DefId, Vec<Export<hir::HirId>>>,
|
||||
@ -1153,7 +1153,7 @@ impl<'tcx> TyCtxt<'tcx> {
|
||||
let mut trait_map: FxHashMap<_, FxHashMap<_, _>> = FxHashMap::default();
|
||||
for (k, v) in resolutions.trait_map {
|
||||
let hir_id = definitions.node_to_hir_id(k);
|
||||
let map = trait_map.entry(hir_id.owner).or_default();
|
||||
let map = trait_map.entry(hir_id.owner_local_def_id()).or_default();
|
||||
let v = v
|
||||
.into_iter()
|
||||
.map(|tc| tc.map_import_ids(|id| definitions.node_to_hir_id(id)))
|
||||
@ -2631,19 +2631,22 @@ impl<'tcx> TyCtxt<'tcx> {
|
||||
}
|
||||
|
||||
pub fn in_scope_traits(self, id: HirId) -> Option<&'tcx StableVec<TraitCandidate>> {
|
||||
self.in_scope_traits_map(id.owner).and_then(|map| map.get(&id.local_id))
|
||||
self.in_scope_traits_map(id.owner_local_def_id()).and_then(|map| map.get(&id.local_id))
|
||||
}
|
||||
|
||||
pub fn named_region(self, id: HirId) -> Option<resolve_lifetime::Region> {
|
||||
self.named_region_map(id.owner).and_then(|map| map.get(&id.local_id).cloned())
|
||||
self.named_region_map(id.owner_local_def_id())
|
||||
.and_then(|map| map.get(&id.local_id).cloned())
|
||||
}
|
||||
|
||||
pub fn is_late_bound(self, id: HirId) -> bool {
|
||||
self.is_late_bound_map(id.owner).map(|set| set.contains(&id.local_id)).unwrap_or(false)
|
||||
self.is_late_bound_map(id.owner_local_def_id())
|
||||
.map(|set| set.contains(&id.local_id))
|
||||
.unwrap_or(false)
|
||||
}
|
||||
|
||||
pub fn object_lifetime_defaults(self, id: HirId) -> Option<&'tcx [ObjectLifetimeDefault]> {
|
||||
self.object_lifetime_defaults_map(id.owner)
|
||||
self.object_lifetime_defaults_map(id.owner_local_def_id())
|
||||
.and_then(|map| map.get(&id.local_id).map(|v| &**v))
|
||||
}
|
||||
}
|
||||
|
@ -7,7 +7,7 @@ use crate::ty::fast_reject::SimplifiedType;
|
||||
use crate::ty::query::caches::DefaultCacheSelector;
|
||||
use crate::ty::subst::SubstsRef;
|
||||
use crate::ty::{self, Ty, TyCtxt};
|
||||
use rustc_hir::def_id::{CrateNum, DefId, DefIndex, LOCAL_CRATE};
|
||||
use rustc_hir::def_id::{CrateNum, DefId, LocalDefId, LOCAL_CRATE};
|
||||
use rustc_span::symbol::Symbol;
|
||||
use rustc_span::{Span, DUMMY_SP};
|
||||
|
||||
@ -84,14 +84,14 @@ impl Key for CrateNum {
|
||||
}
|
||||
}
|
||||
|
||||
impl Key for DefIndex {
|
||||
impl Key for LocalDefId {
|
||||
type CacheSelector = DefaultCacheSelector;
|
||||
|
||||
fn query_crate(&self) -> CrateNum {
|
||||
LOCAL_CRATE
|
||||
self.to_def_id().query_crate()
|
||||
}
|
||||
fn default_span(&self, _tcx: TyCtxt<'_>) -> Span {
|
||||
DUMMY_SP
|
||||
fn default_span(&self, tcx: TyCtxt<'_>) -> Span {
|
||||
self.to_def_id().default_span(tcx)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -44,7 +44,7 @@ use rustc_data_structures::svh::Svh;
|
||||
use rustc_data_structures::sync::Lrc;
|
||||
use rustc_hir as hir;
|
||||
use rustc_hir::def::DefKind;
|
||||
use rustc_hir::def_id::{CrateNum, DefId, DefIdMap, DefIdSet, DefIndex};
|
||||
use rustc_hir::def_id::{CrateNum, DefId, DefIdMap, DefIdSet, LocalDefId};
|
||||
use rustc_hir::{Crate, HirIdSet, ItemLocalId, TraitCandidate};
|
||||
use rustc_index::vec::IndexVec;
|
||||
use rustc_session::config::{EntryFnType, OptLevel, OutputFilenames, SymbolManglingVersion};
|
||||
@ -147,7 +147,7 @@ rustc_query_append! { [define_queries!][<'tcx>] }
|
||||
///
|
||||
/// When you implement a new query, it will likely have a corresponding new
|
||||
/// `DepKind`, and you'll have to support it here in `force_from_dep_node()`. As
|
||||
/// a rule of thumb, if your query takes a `DefId` or `DefIndex` as sole parameter,
|
||||
/// a rule of thumb, if your query takes a `DefId` or `LocalDefId` as sole parameter,
|
||||
/// then `force_from_dep_node()` should not fail for it. Otherwise, you can just
|
||||
/// add it to the "We don't have enough information to reconstruct..." group in
|
||||
/// the match below.
|
||||
|
@ -774,7 +774,7 @@ fn for_each_late_bound_region_defined_on<'tcx>(
|
||||
fn_def_id: DefId,
|
||||
mut f: impl FnMut(ty::Region<'tcx>),
|
||||
) {
|
||||
if let Some(late_bounds) = tcx.is_late_bound_map(fn_def_id.index) {
|
||||
if let Some(late_bounds) = tcx.is_late_bound_map(fn_def_id.to_local()) {
|
||||
for late_bound in late_bounds.iter() {
|
||||
let hir_id = HirId { owner: fn_def_id.index, local_id: *late_bound };
|
||||
let name = tcx.hir().name(hir_id);
|
||||
|
@ -17,7 +17,7 @@ use rustc_data_structures::fx::{FxHashMap, FxHashSet};
|
||||
use rustc_errors::{struct_span_err, Applicability, DiagnosticBuilder};
|
||||
use rustc_hir as hir;
|
||||
use rustc_hir::def::{DefKind, Res};
|
||||
use rustc_hir::def_id::{CrateNum, DefId, DefIdMap, LocalDefId, LOCAL_CRATE};
|
||||
use rustc_hir::def_id::{CrateNum, DefId, DefIdMap, LOCAL_CRATE};
|
||||
use rustc_hir::intravisit::{self, NestedVisitorMap, Visitor};
|
||||
use rustc_hir::{GenericArg, GenericParam, LifetimeName, Node, ParamName, QPath};
|
||||
use rustc_hir::{GenericParamKind, HirIdMap, HirIdSet, LifetimeParamKind};
|
||||
@ -280,25 +280,14 @@ pub fn provide(providers: &mut ty::query::Providers<'_>) {
|
||||
*providers = ty::query::Providers {
|
||||
resolve_lifetimes,
|
||||
|
||||
named_region_map: |tcx, id| {
|
||||
let id = LocalDefId::from_def_id(DefId::local(id)); // (*)
|
||||
tcx.resolve_lifetimes(LOCAL_CRATE).defs.get(&id)
|
||||
},
|
||||
|
||||
is_late_bound_map: |tcx, id| {
|
||||
let id = LocalDefId::from_def_id(DefId::local(id)); // (*)
|
||||
tcx.resolve_lifetimes(LOCAL_CRATE).late_bound.get(&id)
|
||||
},
|
||||
|
||||
named_region_map: |tcx, id| tcx.resolve_lifetimes(LOCAL_CRATE).defs.get(&id),
|
||||
is_late_bound_map: |tcx, id| tcx.resolve_lifetimes(LOCAL_CRATE).late_bound.get(&id),
|
||||
object_lifetime_defaults_map: |tcx, id| {
|
||||
let id = LocalDefId::from_def_id(DefId::local(id)); // (*)
|
||||
tcx.resolve_lifetimes(LOCAL_CRATE).object_lifetime_defaults.get(&id)
|
||||
},
|
||||
|
||||
..*providers
|
||||
};
|
||||
|
||||
// (*) FIXME the query should be defined to take a LocalDefId
|
||||
}
|
||||
|
||||
/// Computes the `ResolveLifetimes` map that contains data for the
|
||||
|
Loading…
x
Reference in New Issue
Block a user