diff options
| author | Michael Goulet <michael@errs.io> | 2023-03-13 22:11:07 +0000 |
|---|---|---|
| committer | Michael Goulet <michael@errs.io> | 2023-03-21 15:38:52 +0000 |
| commit | dcaf956de0835a391b0dca5f85d38abe641b52e6 (patch) | |
| tree | 4beaa37cc9f9873a016b1c801689b82b5970e5fd /compiler | |
| parent | 7e6506764bf315dee81b403c724d31677b7694f5 (diff) | |
| download | rust-dcaf956de0835a391b0dca5f85d38abe641b52e6.tar.gz rust-dcaf956de0835a391b0dca5f85d38abe641b52e6.zip | |
AsLocalKey trait
Diffstat (limited to 'compiler')
| -rw-r--r-- | compiler/rustc_middle/src/query/keys.rs | 347 | ||||
| -rw-r--r-- | compiler/rustc_middle/src/query/mod.rs | 3 | ||||
| -rw-r--r-- | compiler/rustc_middle/src/ty/query.rs | 9 | ||||
| -rw-r--r-- | compiler/rustc_query_impl/src/lib.rs | 2 |
4 files changed, 48 insertions, 313 deletions
diff --git a/compiler/rustc_middle/src/query/keys.rs b/compiler/rustc_middle/src/query/keys.rs index 2f99a8874c0..f161f61d53e 100644 --- a/compiler/rustc_middle/src/query/keys.rs +++ b/compiler/rustc_middle/src/query/keys.rs @@ -26,12 +26,6 @@ pub trait Key: Sized { // r-a issue: <https://github.com/rust-lang/rust-analyzer/issues/13693> type CacheSelector; - type LocalKey; - - /// Given an instance of this key, what crate is it referring to? - /// This is used to find the provider. - fn as_local_key(&self) -> Option<Self::LocalKey>; - /// In the event that a cycle occurs, if no explicit span has been /// given for a query with key `self`, what span should we use? fn default_span(&self, tcx: TyCtxt<'_>) -> Span; @@ -47,14 +41,16 @@ pub trait Key: Sized { } } +pub trait AsLocalKey: Key { + type LocalKey; + + /// Given an instance of this key, what crate is it referring to? + /// This is used to find the provider. + fn as_local_key(&self) -> Option<Self::LocalKey>; +} + impl Key for () { type CacheSelector = SingleCacheSelector; - type LocalKey = Self; - - #[inline(always)] - fn as_local_key(&self) -> Option<Self> { - Some(*self) - } fn default_span(&self, _: TyCtxt<'_>) -> Span { DUMMY_SP @@ -63,26 +59,23 @@ impl Key for () { impl<'tcx> Key for ty::InstanceDef<'tcx> { type CacheSelector = DefaultCacheSelector<Self>; - type LocalKey = Self; - - #[inline(always)] - fn as_local_key(&self) -> Option<Self> { - self.def_id().is_local().then(|| *self) - } fn default_span(&self, tcx: TyCtxt<'_>) -> Span { tcx.def_span(self.def_id()) } } -impl<'tcx> Key for ty::Instance<'tcx> { - type CacheSelector = DefaultCacheSelector<Self>; +impl<'tcx> AsLocalKey for ty::InstanceDef<'tcx> { type LocalKey = Self; #[inline(always)] - fn as_local_key(&self) -> Option<Self> { + fn as_local_key(&self) -> Option<Self::LocalKey> { self.def_id().is_local().then(|| *self) } +} + +impl<'tcx> Key for ty::Instance<'tcx> { + type CacheSelector = DefaultCacheSelector<Self>; fn default_span(&self, tcx: TyCtxt<'_>) -> Span { tcx.def_span(self.def_id()) @@ -91,12 +84,6 @@ impl<'tcx> Key for ty::Instance<'tcx> { impl<'tcx> Key for mir::interpret::GlobalId<'tcx> { type CacheSelector = DefaultCacheSelector<Self>; - type LocalKey = Self; - - #[inline(always)] - fn as_local_key(&self) -> Option<Self> { - Some(*self) - } fn default_span(&self, tcx: TyCtxt<'_>) -> Span { self.instance.default_span(tcx) @@ -105,12 +92,6 @@ impl<'tcx> Key for mir::interpret::GlobalId<'tcx> { impl<'tcx> Key for (Ty<'tcx>, Option<ty::PolyExistentialTraitRef<'tcx>>) { type CacheSelector = DefaultCacheSelector<Self>; - type LocalKey = Self; - - #[inline(always)] - fn as_local_key(&self) -> Option<Self> { - Some(*self) - } fn default_span(&self, _: TyCtxt<'_>) -> Span { DUMMY_SP @@ -119,12 +100,6 @@ impl<'tcx> Key for (Ty<'tcx>, Option<ty::PolyExistentialTraitRef<'tcx>>) { impl<'tcx> Key for mir::interpret::LitToConstInput<'tcx> { type CacheSelector = DefaultCacheSelector<Self>; - type LocalKey = Self; - - #[inline(always)] - fn as_local_key(&self) -> Option<Self> { - Some(*self) - } fn default_span(&self, _tcx: TyCtxt<'_>) -> Span { DUMMY_SP @@ -133,26 +108,23 @@ impl<'tcx> Key for mir::interpret::LitToConstInput<'tcx> { impl Key for CrateNum { type CacheSelector = VecCacheSelector<Self>; + + fn default_span(&self, _: TyCtxt<'_>) -> Span { + DUMMY_SP + } +} + +impl AsLocalKey for CrateNum { type LocalKey = (); #[inline(always)] fn as_local_key(&self) -> Option<Self::LocalKey> { (*self == LOCAL_CRATE).then_some(()) } - - fn default_span(&self, _: TyCtxt<'_>) -> Span { - DUMMY_SP - } } impl Key for OwnerId { type CacheSelector = VecCacheSelector<Self>; - type LocalKey = Self; - - #[inline(always)] - fn as_local_key(&self) -> Option<Self> { - Some(*self) - } fn default_span(&self, tcx: TyCtxt<'_>) -> Span { self.to_def_id().default_span(tcx) @@ -165,12 +137,6 @@ impl Key for OwnerId { impl Key for LocalDefId { type CacheSelector = VecCacheSelector<Self>; - type LocalKey = Self; - - #[inline(always)] - fn as_local_key(&self) -> Option<Self> { - Some(*self) - } fn default_span(&self, tcx: TyCtxt<'_>) -> Span { self.to_def_id().default_span(tcx) @@ -183,12 +149,6 @@ impl Key for LocalDefId { impl Key for DefId { type CacheSelector = DefaultCacheSelector<Self>; - type LocalKey = LocalDefId; - - #[inline(always)] - fn as_local_key(&self) -> Option<Self::LocalKey> { - self.as_local() - } fn default_span(&self, tcx: TyCtxt<'_>) -> Span { tcx.def_span(*self) @@ -200,14 +160,17 @@ impl Key for DefId { } } -impl Key for ty::WithOptConstParam<LocalDefId> { - type CacheSelector = DefaultCacheSelector<Self>; - type LocalKey = Self; +impl AsLocalKey for DefId { + type LocalKey = LocalDefId; #[inline(always)] - fn as_local_key(&self) -> Option<Self> { - Some(*self) + fn as_local_key(&self) -> Option<Self::LocalKey> { + self.as_local() } +} + +impl Key for ty::WithOptConstParam<LocalDefId> { + type CacheSelector = DefaultCacheSelector<Self>; fn default_span(&self, tcx: TyCtxt<'_>) -> Span { self.did.default_span(tcx) @@ -216,12 +179,6 @@ impl Key for ty::WithOptConstParam<LocalDefId> { impl Key for SimplifiedType { type CacheSelector = DefaultCacheSelector<Self>; - type LocalKey = Self; - - #[inline(always)] - fn as_local_key(&self) -> Option<Self> { - Some(*self) - } fn default_span(&self, _: TyCtxt<'_>) -> Span { DUMMY_SP @@ -230,12 +187,6 @@ impl Key for SimplifiedType { impl Key for (DefId, DefId) { type CacheSelector = DefaultCacheSelector<Self>; - type LocalKey = (LocalDefId, DefId); - - #[inline(always)] - fn as_local_key(&self) -> Option<Self::LocalKey> { - Some((self.0.as_local()?, self.1)) - } fn default_span(&self, tcx: TyCtxt<'_>) -> Span { self.1.default_span(tcx) @@ -244,12 +195,6 @@ impl Key for (DefId, DefId) { impl<'tcx> Key for (ty::Instance<'tcx>, LocalDefId) { type CacheSelector = DefaultCacheSelector<Self>; - type LocalKey = Self; - - #[inline(always)] - fn as_local_key(&self) -> Option<Self> { - Some(*self) - } fn default_span(&self, tcx: TyCtxt<'_>) -> Span { self.0.default_span(tcx) @@ -258,12 +203,6 @@ impl<'tcx> Key for (ty::Instance<'tcx>, LocalDefId) { impl Key for (DefId, LocalDefId) { type CacheSelector = DefaultCacheSelector<Self>; - type LocalKey = (LocalDefId, LocalDefId); - - #[inline(always)] - fn as_local_key(&self) -> Option<Self::LocalKey> { - Some((self.0.as_local()?, self.1)) - } fn default_span(&self, tcx: TyCtxt<'_>) -> Span { self.1.default_span(tcx) @@ -272,12 +211,6 @@ impl Key for (DefId, LocalDefId) { impl Key for (LocalDefId, DefId) { type CacheSelector = DefaultCacheSelector<Self>; - type LocalKey = Self; - - #[inline(always)] - fn as_local_key(&self) -> Option<Self> { - Some(*self) - } fn default_span(&self, tcx: TyCtxt<'_>) -> Span { self.0.default_span(tcx) @@ -286,12 +219,6 @@ impl Key for (LocalDefId, DefId) { impl Key for (LocalDefId, LocalDefId) { type CacheSelector = DefaultCacheSelector<Self>; - type LocalKey = Self; - - #[inline(always)] - fn as_local_key(&self) -> Option<Self> { - Some(*self) - } fn default_span(&self, tcx: TyCtxt<'_>) -> Span { self.0.default_span(tcx) @@ -300,11 +227,6 @@ impl Key for (LocalDefId, LocalDefId) { impl Key for (DefId, Option<Ident>) { type CacheSelector = DefaultCacheSelector<Self>; - type LocalKey = (LocalDefId, Option<Ident>); - - fn as_local_key(&self) -> Option<Self::LocalKey> { - Some((self.0.as_local()?, self.1)) - } fn default_span(&self, tcx: TyCtxt<'_>) -> Span { tcx.def_span(self.0) @@ -318,11 +240,6 @@ impl Key for (DefId, Option<Ident>) { impl Key for (LocalDefId, LocalDefId, Ident) { type CacheSelector = DefaultCacheSelector<Self>; - type LocalKey = Self; - - fn as_local_key(&self) -> Option<Self::LocalKey> { - Some(*self) - } fn default_span(&self, tcx: TyCtxt<'_>) -> Span { self.1.default_span(tcx) @@ -331,40 +248,40 @@ impl Key for (LocalDefId, LocalDefId, Ident) { impl Key for (CrateNum, DefId) { type CacheSelector = DefaultCacheSelector<Self>; - type LocalKey = DefId; - - #[inline(always)] - fn as_local_key(&self) -> Option<Self::LocalKey> { - (self.0 == LOCAL_CRATE).then_some(self.1) - } fn default_span(&self, tcx: TyCtxt<'_>) -> Span { self.1.default_span(tcx) } } -impl Key for (CrateNum, SimplifiedType) { - type CacheSelector = DefaultCacheSelector<Self>; - type LocalKey = SimplifiedType; +impl AsLocalKey for (CrateNum, DefId) { + type LocalKey = DefId; #[inline(always)] fn as_local_key(&self) -> Option<Self::LocalKey> { - (self.0 == LOCAL_CRATE).then_some(self.1) + (self.0 == LOCAL_CRATE).then(|| self.1) } +} + +impl Key for (CrateNum, SimplifiedType) { + type CacheSelector = DefaultCacheSelector<Self>; fn default_span(&self, _: TyCtxt<'_>) -> Span { DUMMY_SP } } -impl Key for (DefId, SimplifiedType) { - type CacheSelector = DefaultCacheSelector<Self>; - type LocalKey = (LocalDefId, SimplifiedType); +impl AsLocalKey for (CrateNum, SimplifiedType) { + type LocalKey = SimplifiedType; #[inline(always)] fn as_local_key(&self) -> Option<Self::LocalKey> { - Some((self.0.as_local()?, self.1)) + (self.0 == LOCAL_CRATE).then(|| self.1) } +} + +impl Key for (DefId, SimplifiedType) { + type CacheSelector = DefaultCacheSelector<Self>; fn default_span(&self, tcx: TyCtxt<'_>) -> Span { self.0.default_span(tcx) @@ -373,12 +290,6 @@ impl Key for (DefId, SimplifiedType) { impl<'tcx> Key for SubstsRef<'tcx> { type CacheSelector = DefaultCacheSelector<Self>; - type LocalKey = Self; - - #[inline(always)] - fn as_local_key(&self) -> Option<Self> { - Some(*self) - } fn default_span(&self, _: TyCtxt<'_>) -> Span { DUMMY_SP @@ -387,12 +298,6 @@ impl<'tcx> Key for SubstsRef<'tcx> { impl<'tcx> Key for (DefId, SubstsRef<'tcx>) { type CacheSelector = DefaultCacheSelector<Self>; - type LocalKey = (LocalDefId, SubstsRef<'tcx>); - - #[inline(always)] - fn as_local_key(&self) -> Option<Self::LocalKey> { - Some((self.0.as_local()?, self.1)) - } fn default_span(&self, tcx: TyCtxt<'_>) -> Span { self.0.default_span(tcx) @@ -401,12 +306,6 @@ impl<'tcx> Key for (DefId, SubstsRef<'tcx>) { impl<'tcx> Key for (ty::UnevaluatedConst<'tcx>, ty::UnevaluatedConst<'tcx>) { type CacheSelector = DefaultCacheSelector<Self>; - type LocalKey = Self; - - #[inline(always)] - fn as_local_key(&self) -> Option<Self::LocalKey> { - self.0.def.is_local().then_some(*self) - } fn default_span(&self, tcx: TyCtxt<'_>) -> Span { (self.0).def.did.default_span(tcx) @@ -415,12 +314,6 @@ impl<'tcx> Key for (ty::UnevaluatedConst<'tcx>, ty::UnevaluatedConst<'tcx>) { impl<'tcx> Key for (LocalDefId, DefId, SubstsRef<'tcx>) { type CacheSelector = DefaultCacheSelector<Self>; - type LocalKey = Self; - - #[inline(always)] - fn as_local_key(&self) -> Option<Self> { - Some(*self) - } fn default_span(&self, tcx: TyCtxt<'_>) -> Span { self.0.default_span(tcx) @@ -429,12 +322,6 @@ impl<'tcx> Key for (LocalDefId, DefId, SubstsRef<'tcx>) { impl<'tcx> Key for (ty::ParamEnv<'tcx>, ty::PolyTraitRef<'tcx>) { type CacheSelector = DefaultCacheSelector<Self>; - type LocalKey = Self; - - #[inline(always)] - fn as_local_key(&self) -> Option<Self::LocalKey> { - self.1.def_id().is_local().then_some(*self) - } fn default_span(&self, tcx: TyCtxt<'_>) -> Span { tcx.def_span(self.1.def_id()) @@ -443,12 +330,6 @@ impl<'tcx> Key for (ty::ParamEnv<'tcx>, ty::PolyTraitRef<'tcx>) { impl<'tcx> Key for (ty::Const<'tcx>, mir::Field) { type CacheSelector = DefaultCacheSelector<Self>; - type LocalKey = Self; - - #[inline(always)] - fn as_local_key(&self) -> Option<Self> { - Some(*self) - } fn default_span(&self, _: TyCtxt<'_>) -> Span { DUMMY_SP @@ -457,12 +338,6 @@ impl<'tcx> Key for (ty::Const<'tcx>, mir::Field) { impl<'tcx> Key for mir::interpret::ConstAlloc<'tcx> { type CacheSelector = DefaultCacheSelector<Self>; - type LocalKey = Self; - - #[inline(always)] - fn as_local_key(&self) -> Option<Self> { - Some(*self) - } fn default_span(&self, _: TyCtxt<'_>) -> Span { DUMMY_SP @@ -471,12 +346,6 @@ impl<'tcx> Key for mir::interpret::ConstAlloc<'tcx> { impl<'tcx> Key for ty::PolyTraitRef<'tcx> { type CacheSelector = DefaultCacheSelector<Self>; - type LocalKey = Self; - - #[inline(always)] - fn as_local_key(&self) -> Option<Self::LocalKey> { - self.def_id().is_local().then_some(*self) - } fn default_span(&self, tcx: TyCtxt<'_>) -> Span { tcx.def_span(self.def_id()) @@ -485,12 +354,6 @@ impl<'tcx> Key for ty::PolyTraitRef<'tcx> { impl<'tcx> Key for ty::PolyExistentialTraitRef<'tcx> { type CacheSelector = DefaultCacheSelector<Self>; - type LocalKey = Self; - - #[inline(always)] - fn as_local_key(&self) -> Option<Self::LocalKey> { - self.def_id().is_local().then_some(*self) - } fn default_span(&self, tcx: TyCtxt<'_>) -> Span { tcx.def_span(self.def_id()) @@ -499,12 +362,6 @@ impl<'tcx> Key for ty::PolyExistentialTraitRef<'tcx> { impl<'tcx> Key for (ty::PolyTraitRef<'tcx>, ty::PolyTraitRef<'tcx>) { type CacheSelector = DefaultCacheSelector<Self>; - type LocalKey = Self; - - #[inline(always)] - fn as_local_key(&self) -> Option<Self::LocalKey> { - self.0.def_id().is_local().then_some(*self) - } fn default_span(&self, tcx: TyCtxt<'_>) -> Span { tcx.def_span(self.0.def_id()) @@ -513,12 +370,6 @@ impl<'tcx> Key for (ty::PolyTraitRef<'tcx>, ty::PolyTraitRef<'tcx>) { impl<'tcx> Key for GenericArg<'tcx> { type CacheSelector = DefaultCacheSelector<Self>; - type LocalKey = Self; - - #[inline(always)] - fn as_local_key(&self) -> Option<Self> { - Some(*self) - } fn default_span(&self, _: TyCtxt<'_>) -> Span { DUMMY_SP @@ -527,12 +378,6 @@ impl<'tcx> Key for GenericArg<'tcx> { impl<'tcx> Key for mir::ConstantKind<'tcx> { type CacheSelector = DefaultCacheSelector<Self>; - type LocalKey = Self; - - #[inline(always)] - fn as_local_key(&self) -> Option<Self> { - Some(*self) - } fn default_span(&self, _: TyCtxt<'_>) -> Span { DUMMY_SP @@ -541,12 +386,6 @@ impl<'tcx> Key for mir::ConstantKind<'tcx> { impl<'tcx> Key for ty::Const<'tcx> { type CacheSelector = DefaultCacheSelector<Self>; - type LocalKey = Self; - - #[inline(always)] - fn as_local_key(&self) -> Option<Self> { - Some(*self) - } fn default_span(&self, _: TyCtxt<'_>) -> Span { DUMMY_SP @@ -555,12 +394,6 @@ impl<'tcx> Key for ty::Const<'tcx> { impl<'tcx> Key for Ty<'tcx> { type CacheSelector = DefaultCacheSelector<Self>; - type LocalKey = Self; - - #[inline(always)] - fn as_local_key(&self) -> Option<Self> { - Some(*self) - } fn default_span(&self, _: TyCtxt<'_>) -> Span { DUMMY_SP @@ -576,12 +409,6 @@ impl<'tcx> Key for Ty<'tcx> { impl<'tcx> Key for TyAndLayout<'tcx> { type CacheSelector = DefaultCacheSelector<Self>; - type LocalKey = Self; - - #[inline(always)] - fn as_local_key(&self) -> Option<Self> { - Some(*self) - } fn default_span(&self, _: TyCtxt<'_>) -> Span { DUMMY_SP @@ -590,12 +417,6 @@ impl<'tcx> Key for TyAndLayout<'tcx> { impl<'tcx> Key for (Ty<'tcx>, Ty<'tcx>) { type CacheSelector = DefaultCacheSelector<Self>; - type LocalKey = Self; - - #[inline(always)] - fn as_local_key(&self) -> Option<Self> { - Some(*self) - } fn default_span(&self, _: TyCtxt<'_>) -> Span { DUMMY_SP @@ -604,12 +425,6 @@ impl<'tcx> Key for (Ty<'tcx>, Ty<'tcx>) { impl<'tcx> Key for &'tcx ty::List<ty::Predicate<'tcx>> { type CacheSelector = DefaultCacheSelector<Self>; - type LocalKey = Self; - - #[inline(always)] - fn as_local_key(&self) -> Option<Self> { - Some(*self) - } fn default_span(&self, _: TyCtxt<'_>) -> Span { DUMMY_SP @@ -618,12 +433,6 @@ impl<'tcx> Key for &'tcx ty::List<ty::Predicate<'tcx>> { impl<'tcx> Key for ty::ParamEnv<'tcx> { type CacheSelector = DefaultCacheSelector<Self>; - type LocalKey = Self; - - #[inline(always)] - fn as_local_key(&self) -> Option<Self> { - Some(*self) - } fn default_span(&self, _: TyCtxt<'_>) -> Span { DUMMY_SP @@ -632,11 +441,6 @@ impl<'tcx> Key for ty::ParamEnv<'tcx> { impl<'tcx, T: Key> Key for ty::ParamEnvAnd<'tcx, T> { type CacheSelector = DefaultCacheSelector<Self>; - type LocalKey = ty::ParamEnvAnd<'tcx, T::LocalKey>; - - fn as_local_key(&self) -> Option<Self::LocalKey> { - self.value.as_local_key().map(|value| ty::ParamEnvAnd { param_env: self.param_env, value }) - } fn default_span(&self, tcx: TyCtxt<'_>) -> Span { self.value.default_span(tcx) @@ -645,12 +449,6 @@ impl<'tcx, T: Key> Key for ty::ParamEnvAnd<'tcx, T> { impl Key for Symbol { type CacheSelector = DefaultCacheSelector<Self>; - type LocalKey = Self; - - #[inline(always)] - fn as_local_key(&self) -> Option<Self> { - Some(*self) - } fn default_span(&self, _tcx: TyCtxt<'_>) -> Span { DUMMY_SP @@ -659,12 +457,6 @@ impl Key for Symbol { impl Key for Option<Symbol> { type CacheSelector = DefaultCacheSelector<Self>; - type LocalKey = Self; - - #[inline(always)] - fn as_local_key(&self) -> Option<Self> { - Some(*self) - } fn default_span(&self, _tcx: TyCtxt<'_>) -> Span { DUMMY_SP @@ -675,12 +467,6 @@ impl Key for Option<Symbol> { /// are not tied to any crate in particular. impl<'tcx, T: Clone> Key for Canonical<'tcx, T> { type CacheSelector = DefaultCacheSelector<Self>; - type LocalKey = Self; - - #[inline(always)] - fn as_local_key(&self) -> Option<Self> { - Some(self.clone()) - } fn default_span(&self, _tcx: TyCtxt<'_>) -> Span { DUMMY_SP @@ -689,12 +475,6 @@ impl<'tcx, T: Clone> Key for Canonical<'tcx, T> { impl Key for (Symbol, u32, u32) { type CacheSelector = DefaultCacheSelector<Self>; - type LocalKey = Self; - - #[inline(always)] - fn as_local_key(&self) -> Option<Self> { - Some(*self) - } fn default_span(&self, _tcx: TyCtxt<'_>) -> Span { DUMMY_SP @@ -703,12 +483,6 @@ impl Key for (Symbol, u32, u32) { impl<'tcx> Key for (DefId, Ty<'tcx>, SubstsRef<'tcx>, ty::ParamEnv<'tcx>) { type CacheSelector = DefaultCacheSelector<Self>; - type LocalKey = Self; - - #[inline(always)] - fn as_local_key(&self) -> Option<Self> { - Some(*self) - } fn default_span(&self, _tcx: TyCtxt<'_>) -> Span { DUMMY_SP @@ -717,12 +491,6 @@ impl<'tcx> Key for (DefId, Ty<'tcx>, SubstsRef<'tcx>, ty::ParamEnv<'tcx>) { impl<'tcx> Key for (ty::Predicate<'tcx>, traits::WellFormedLoc) { type CacheSelector = DefaultCacheSelector<Self>; - type LocalKey = Self; - - #[inline(always)] - fn as_local_key(&self) -> Option<Self> { - Some(*self) - } fn default_span(&self, _tcx: TyCtxt<'_>) -> Span { DUMMY_SP @@ -731,12 +499,6 @@ impl<'tcx> Key for (ty::Predicate<'tcx>, traits::WellFormedLoc) { impl<'tcx> Key for (ty::PolyFnSig<'tcx>, &'tcx ty::List<Ty<'tcx>>) { type CacheSelector = DefaultCacheSelector<Self>; - type LocalKey = Self; - - #[inline(always)] - fn as_local_key(&self) -> Option<Self> { - Some(*self) - } fn default_span(&self, _: TyCtxt<'_>) -> Span { DUMMY_SP @@ -745,12 +507,6 @@ impl<'tcx> Key for (ty::PolyFnSig<'tcx>, &'tcx ty::List<Ty<'tcx>>) { impl<'tcx> Key for (ty::Instance<'tcx>, &'tcx ty::List<Ty<'tcx>>) { type CacheSelector = DefaultCacheSelector<Self>; - type LocalKey = Self; - - #[inline(always)] - fn as_local_key(&self) -> Option<Self> { - Some(*self) - } fn default_span(&self, tcx: TyCtxt<'_>) -> Span { self.0.default_span(tcx) @@ -759,12 +515,6 @@ impl<'tcx> Key for (ty::Instance<'tcx>, &'tcx ty::List<Ty<'tcx>>) { impl<'tcx> Key for (Ty<'tcx>, ty::ValTree<'tcx>) { type CacheSelector = DefaultCacheSelector<Self>; - type LocalKey = Self; - - #[inline(always)] - fn as_local_key(&self) -> Option<Self> { - Some(*self) - } fn default_span(&self, _: TyCtxt<'_>) -> Span { DUMMY_SP @@ -773,12 +523,6 @@ impl<'tcx> Key for (Ty<'tcx>, ty::ValTree<'tcx>) { impl Key for HirId { type CacheSelector = DefaultCacheSelector<Self>; - type LocalKey = Self; - - #[inline(always)] - fn as_local_key(&self) -> Option<Self> { - Some(*self) - } fn default_span(&self, tcx: TyCtxt<'_>) -> Span { tcx.hir().span(*self) @@ -792,13 +536,8 @@ impl Key for HirId { impl<'tcx> Key for (ValidityRequirement, ty::ParamEnvAnd<'tcx, Ty<'tcx>>) { type CacheSelector = DefaultCacheSelector<Self>; - type LocalKey = Self; // Just forward to `Ty<'tcx>` - #[inline(always)] - fn as_local_key(&self) -> Option<Self> { - Some(*self) - } fn default_span(&self, _: TyCtxt<'_>) -> Span { DUMMY_SP diff --git a/compiler/rustc_middle/src/query/mod.rs b/compiler/rustc_middle/src/query/mod.rs index 13f6779bd4f..f5cbfd6623e 100644 --- a/compiler/rustc_middle/src/query/mod.rs +++ b/compiler/rustc_middle/src/query/mod.rs @@ -8,7 +8,7 @@ use crate::ty::{self, print::describe_as_module, TyCtxt}; use rustc_span::def_id::LOCAL_CRATE; mod keys; -pub use keys::Key; +pub use keys::{AsLocalKey, Key}; // Each of these queries corresponds to a function pointer field in the // `Providers` struct for requesting a value of that type, and a method @@ -796,7 +796,6 @@ rustc_queries! { query associated_type_for_impl_trait_in_trait(opaque_ty_def_id: LocalDefId) -> LocalDefId { desc { |tcx| "creates the associated item corresponding to the opaque type `{}`", tcx.def_path_str(opaque_ty_def_id.to_def_id()) } cache_on_disk_if { true } - separate_provide_extern } /// Given an `impl_id`, return the trait it implements. diff --git a/compiler/rustc_middle/src/ty/query.rs b/compiler/rustc_middle/src/ty/query.rs index 3cf28408f69..2771d713c42 100644 --- a/compiler/rustc_middle/src/ty/query.rs +++ b/compiler/rustc_middle/src/ty/query.rs @@ -17,7 +17,7 @@ use crate::mir::interpret::{ }; use crate::mir::interpret::{LitToConstError, LitToConstInput}; use crate::mir::mono::CodegenUnit; -use crate::query::Key; +use crate::query::{AsLocalKey, Key}; use crate::thir; use crate::traits::query::{ CanonicalPredicateGoal, CanonicalProjectionGoal, CanonicalTyGoal, @@ -233,7 +233,7 @@ macro_rules! define_callbacks { pub mod query_keys_local { use super::*; - $(pub type $name<'tcx> = <$($K)* as Key>::LocalKey;)* + $(pub type $name<'tcx> = <$($K)* as AsLocalKey>::LocalKey;)* } #[allow(nonstandard_style, unused_lifetimes)] pub mod query_values { @@ -416,17 +416,14 @@ macro_rules! define_callbacks { impl Default for Providers { fn default() -> Self { - use crate::query::Key; - Providers { $($name: |_, key| bug!( - "`tcx.{}({:?})` is not supported for {} crate;\n\ + "`tcx.{}({:?})` is not supported for this key;\n\ hint: Queries can be either made to the local crate, or the external crate. \ This error means you tried to use it for one that's not supported.\n\ If that's not the case, {} was likely never assigned to a provider function.\n", stringify!($name), key, - if key.as_local_key().is_some() { "local" } else { "external" }, stringify!($name), ),)* } diff --git a/compiler/rustc_query_impl/src/lib.rs b/compiler/rustc_query_impl/src/lib.rs index 035bfe978f2..4cd94237061 100644 --- a/compiler/rustc_query_impl/src/lib.rs +++ b/compiler/rustc_query_impl/src/lib.rs @@ -20,7 +20,7 @@ extern crate rustc_middle; use rustc_data_structures::sync::AtomicU64; use rustc_middle::arena::Arena; use rustc_middle::dep_graph::{self, DepKindStruct}; -use rustc_middle::query::Key; +use rustc_middle::query::AsLocalKey; use rustc_middle::ty::query::{ query_keys, query_provided, query_provided_to_value, query_storage, query_values, }; |
