rustc: use LocalDefId instead of DefIndex for query keys.
This commit is contained in:
parent
6724d584b8
commit
e11dd47503
7 changed files with 31 additions and 39 deletions
|
@ -63,7 +63,7 @@ use crate::ty::subst::SubstsRef;
|
||||||
use crate::ty::{self, ParamEnvAnd, Ty, TyCtxt};
|
use crate::ty::{self, ParamEnvAnd, Ty, TyCtxt};
|
||||||
|
|
||||||
use rustc_data_structures::stable_hasher::{HashStable, StableHasher};
|
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_hir::HirId;
|
||||||
use rustc_span::symbol::Symbol;
|
use rustc_span::symbol::Symbol;
|
||||||
use std::fmt;
|
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;
|
const CAN_RECONSTRUCT_QUERY_KEY: bool = true;
|
||||||
|
|
||||||
fn to_fingerprint(&self, tcx: TyCtxt<'_>) -> Fingerprint {
|
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 {
|
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> {
|
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::query::QueryDescription;
|
||||||
use crate::ty::subst::SubstsRef;
|
use crate::ty::subst::SubstsRef;
|
||||||
use crate::ty::{self, ParamEnvAnd, Ty, TyCtxt};
|
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 rustc_span::symbol::Symbol;
|
||||||
use std::borrow::Cow;
|
use std::borrow::Cow;
|
||||||
|
@ -791,7 +791,7 @@ rustc_queries! {
|
||||||
query specializes(_: (DefId, DefId)) -> bool {
|
query specializes(_: (DefId, DefId)) -> bool {
|
||||||
desc { "computing whether impls specialize one another" }
|
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>>> {
|
-> Option<&'tcx FxHashMap<ItemLocalId, StableVec<TraitCandidate>>> {
|
||||||
eval_always
|
eval_always
|
||||||
desc { "traits in scope at a block" }
|
desc { "traits in scope at a block" }
|
||||||
|
@ -948,15 +948,15 @@ rustc_queries! {
|
||||||
query resolve_lifetimes(_: CrateNum) -> &'tcx ResolveLifetimes {
|
query resolve_lifetimes(_: CrateNum) -> &'tcx ResolveLifetimes {
|
||||||
desc { "resolving lifetimes" }
|
desc { "resolving lifetimes" }
|
||||||
}
|
}
|
||||||
query named_region_map(_: DefIndex) ->
|
query named_region_map(_: LocalDefId) ->
|
||||||
Option<&'tcx FxHashMap<ItemLocalId, Region>> {
|
Option<&'tcx FxHashMap<ItemLocalId, Region>> {
|
||||||
desc { "looking up a named region" }
|
desc { "looking up a named region" }
|
||||||
}
|
}
|
||||||
query is_late_bound_map(_: DefIndex) ->
|
query is_late_bound_map(_: LocalDefId) ->
|
||||||
Option<&'tcx FxHashSet<ItemLocalId>> {
|
Option<&'tcx FxHashSet<ItemLocalId>> {
|
||||||
desc { "testing if a region is late bound" }
|
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>>> {
|
-> Option<&'tcx FxHashMap<ItemLocalId, Vec<ObjectLifetimeDefault>>> {
|
||||||
desc { "looking up lifetime defaults for a region" }
|
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_data_structures::sync::{self, Lock, Lrc, WorkerLocal};
|
||||||
use rustc_hir as hir;
|
use rustc_hir as hir;
|
||||||
use rustc_hir::def::{DefKind, Res};
|
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::{HirId, Node, TraitCandidate};
|
||||||
use rustc_hir::{ItemKind, ItemLocalId, ItemLocalMap, ItemLocalSet};
|
use rustc_hir::{ItemKind, ItemLocalId, ItemLocalMap, ItemLocalSet};
|
||||||
use rustc_index::vec::{Idx, IndexVec};
|
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
|
/// Map indicating what traits are in scope for places where this
|
||||||
/// is relevant; generated by resolve.
|
/// 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 produced by name resolution.
|
||||||
export_map: FxHashMap<DefId, Vec<Export<hir::HirId>>>,
|
export_map: FxHashMap<DefId, Vec<Export<hir::HirId>>>,
|
||||||
|
@ -1153,7 +1153,7 @@ impl<'tcx> TyCtxt<'tcx> {
|
||||||
let mut trait_map: FxHashMap<_, FxHashMap<_, _>> = FxHashMap::default();
|
let mut trait_map: FxHashMap<_, FxHashMap<_, _>> = FxHashMap::default();
|
||||||
for (k, v) in resolutions.trait_map {
|
for (k, v) in resolutions.trait_map {
|
||||||
let hir_id = definitions.node_to_hir_id(k);
|
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
|
let v = v
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.map(|tc| tc.map_import_ids(|id| definitions.node_to_hir_id(id)))
|
.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>> {
|
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> {
|
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 {
|
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]> {
|
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))
|
.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::query::caches::DefaultCacheSelector;
|
||||||
use crate::ty::subst::SubstsRef;
|
use crate::ty::subst::SubstsRef;
|
||||||
use crate::ty::{self, Ty, TyCtxt};
|
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::symbol::Symbol;
|
||||||
use rustc_span::{Span, DUMMY_SP};
|
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;
|
type CacheSelector = DefaultCacheSelector;
|
||||||
|
|
||||||
fn query_crate(&self) -> CrateNum {
|
fn query_crate(&self) -> CrateNum {
|
||||||
LOCAL_CRATE
|
self.to_def_id().query_crate()
|
||||||
}
|
}
|
||||||
fn default_span(&self, _tcx: TyCtxt<'_>) -> Span {
|
fn default_span(&self, tcx: TyCtxt<'_>) -> Span {
|
||||||
DUMMY_SP
|
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_data_structures::sync::Lrc;
|
||||||
use rustc_hir as hir;
|
use rustc_hir as hir;
|
||||||
use rustc_hir::def::DefKind;
|
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_hir::{Crate, HirIdSet, ItemLocalId, TraitCandidate};
|
||||||
use rustc_index::vec::IndexVec;
|
use rustc_index::vec::IndexVec;
|
||||||
use rustc_session::config::{EntryFnType, OptLevel, OutputFilenames, SymbolManglingVersion};
|
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
|
/// 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
|
/// `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
|
/// 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
|
/// add it to the "We don't have enough information to reconstruct..." group in
|
||||||
/// the match below.
|
/// the match below.
|
||||||
|
|
|
@ -774,7 +774,7 @@ fn for_each_late_bound_region_defined_on<'tcx>(
|
||||||
fn_def_id: DefId,
|
fn_def_id: DefId,
|
||||||
mut f: impl FnMut(ty::Region<'tcx>),
|
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() {
|
for late_bound in late_bounds.iter() {
|
||||||
let hir_id = HirId { owner: fn_def_id.index, local_id: *late_bound };
|
let hir_id = HirId { owner: fn_def_id.index, local_id: *late_bound };
|
||||||
let name = tcx.hir().name(hir_id);
|
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_errors::{struct_span_err, Applicability, DiagnosticBuilder};
|
||||||
use rustc_hir as hir;
|
use rustc_hir as hir;
|
||||||
use rustc_hir::def::{DefKind, Res};
|
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::intravisit::{self, NestedVisitorMap, Visitor};
|
||||||
use rustc_hir::{GenericArg, GenericParam, LifetimeName, Node, ParamName, QPath};
|
use rustc_hir::{GenericArg, GenericParam, LifetimeName, Node, ParamName, QPath};
|
||||||
use rustc_hir::{GenericParamKind, HirIdMap, HirIdSet, LifetimeParamKind};
|
use rustc_hir::{GenericParamKind, HirIdMap, HirIdSet, LifetimeParamKind};
|
||||||
|
@ -280,25 +280,14 @@ pub fn provide(providers: &mut ty::query::Providers<'_>) {
|
||||||
*providers = ty::query::Providers {
|
*providers = ty::query::Providers {
|
||||||
resolve_lifetimes,
|
resolve_lifetimes,
|
||||||
|
|
||||||
named_region_map: |tcx, id| {
|
named_region_map: |tcx, id| tcx.resolve_lifetimes(LOCAL_CRATE).defs.get(&id),
|
||||||
let id = LocalDefId::from_def_id(DefId::local(id)); // (*)
|
is_late_bound_map: |tcx, id| tcx.resolve_lifetimes(LOCAL_CRATE).late_bound.get(&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)
|
|
||||||
},
|
|
||||||
|
|
||||||
object_lifetime_defaults_map: |tcx, 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)
|
tcx.resolve_lifetimes(LOCAL_CRATE).object_lifetime_defaults.get(&id)
|
||||||
},
|
},
|
||||||
|
|
||||||
..*providers
|
..*providers
|
||||||
};
|
};
|
||||||
|
|
||||||
// (*) FIXME the query should be defined to take a LocalDefId
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Computes the `ResolveLifetimes` map that contains data for the
|
/// Computes the `ResolveLifetimes` map that contains data for the
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue