Move query providers
This commit is contained in:
parent
b5d0608761
commit
d4fa5648c3
@ -13,7 +13,6 @@
|
|||||||
use rustc_middle::middle::dependency_format::Linkage;
|
use rustc_middle::middle::dependency_format::Linkage;
|
||||||
use rustc_middle::middle::exported_symbols::metadata_symbol_name;
|
use rustc_middle::middle::exported_symbols::metadata_symbol_name;
|
||||||
use rustc_middle::mir::interpret;
|
use rustc_middle::mir::interpret;
|
||||||
use rustc_middle::query::LocalCrate;
|
|
||||||
use rustc_middle::query::Providers;
|
use rustc_middle::query::Providers;
|
||||||
use rustc_middle::traits::specialization_graph;
|
use rustc_middle::traits::specialization_graph;
|
||||||
use rustc_middle::ty::codec::TyEncoder;
|
use rustc_middle::ty::codec::TyEncoder;
|
||||||
@ -2298,30 +2297,6 @@ pub fn provide(providers: &mut Providers) {
|
|||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
|
||||||
// TODO: Uplift these into
|
|
||||||
traits: |tcx, LocalCrate| {
|
|
||||||
let mut traits = Vec::new();
|
|
||||||
for id in tcx.hir().items() {
|
|
||||||
if matches!(tcx.def_kind(id.owner_id), DefKind::Trait | DefKind::TraitAlias) {
|
|
||||||
traits.push(id.owner_id.to_def_id())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
tcx.arena.alloc_slice(&traits)
|
|
||||||
},
|
|
||||||
trait_impls_in_crate: |tcx, LocalCrate| {
|
|
||||||
let mut trait_impls = Vec::new();
|
|
||||||
for id in tcx.hir().items() {
|
|
||||||
if matches!(tcx.def_kind(id.owner_id), DefKind::Impl { .. })
|
|
||||||
&& tcx.impl_trait_ref(id.owner_id).is_some()
|
|
||||||
{
|
|
||||||
trait_impls.push(id.owner_id.to_def_id())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
tcx.arena.alloc_slice(&trait_impls)
|
|
||||||
},
|
|
||||||
|
|
||||||
..*providers
|
..*providers
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2082,6 +2082,8 @@ pub fn provide(providers: &mut Providers) {
|
|||||||
*providers = Providers {
|
*providers = Providers {
|
||||||
trait_impls_of: trait_def::trait_impls_of_provider,
|
trait_impls_of: trait_def::trait_impls_of_provider,
|
||||||
incoherent_impls: trait_def::incoherent_impls_provider,
|
incoherent_impls: trait_def::incoherent_impls_provider,
|
||||||
|
trait_impls_in_crate: trait_def::trait_impls_in_crate_provider,
|
||||||
|
traits: trait_def::traits_provider,
|
||||||
const_param_default: consts::const_param_default,
|
const_param_default: consts::const_param_default,
|
||||||
vtable_allocation: vtable::vtable_allocation_provider,
|
vtable_allocation: vtable::vtable_allocation_provider,
|
||||||
..*providers
|
..*providers
|
||||||
|
@ -1,16 +1,19 @@
|
|||||||
use crate::traits::specialization_graph;
|
|
||||||
use crate::ty::fast_reject::{self, SimplifiedType, TreatParams};
|
|
||||||
use crate::ty::{Ident, Ty, TyCtxt};
|
|
||||||
use hir::def_id::LOCAL_CRATE;
|
|
||||||
use rustc_hir as hir;
|
|
||||||
use rustc_hir::def_id::DefId;
|
|
||||||
use std::iter;
|
use std::iter;
|
||||||
use tracing::debug;
|
use tracing::debug;
|
||||||
|
|
||||||
use rustc_data_structures::fx::FxIndexMap;
|
use rustc_data_structures::fx::FxIndexMap;
|
||||||
use rustc_errors::ErrorGuaranteed;
|
use rustc_errors::ErrorGuaranteed;
|
||||||
|
use rustc_hir as hir;
|
||||||
|
use rustc_hir::def::DefKind;
|
||||||
|
use rustc_hir::def_id::DefId;
|
||||||
|
use rustc_hir::def_id::LOCAL_CRATE;
|
||||||
use rustc_macros::{Decodable, Encodable, HashStable};
|
use rustc_macros::{Decodable, Encodable, HashStable};
|
||||||
|
|
||||||
|
use crate::query::LocalCrate;
|
||||||
|
use crate::traits::specialization_graph;
|
||||||
|
use crate::ty::fast_reject::{self, SimplifiedType, TreatParams};
|
||||||
|
use crate::ty::{Ident, Ty, TyCtxt};
|
||||||
|
|
||||||
/// A trait's definition with type information.
|
/// A trait's definition with type information.
|
||||||
#[derive(HashStable, Encodable, Decodable)]
|
#[derive(HashStable, Encodable, Decodable)]
|
||||||
pub struct TraitDef {
|
pub struct TraitDef {
|
||||||
@ -274,3 +277,27 @@ pub(super) fn incoherent_impls_provider(
|
|||||||
|
|
||||||
Ok(tcx.arena.alloc_slice(&impls))
|
Ok(tcx.arena.alloc_slice(&impls))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub(super) fn traits_provider(tcx: TyCtxt<'_>, _: LocalCrate) -> &[DefId] {
|
||||||
|
let mut traits = Vec::new();
|
||||||
|
for id in tcx.hir().items() {
|
||||||
|
if matches!(tcx.def_kind(id.owner_id), DefKind::Trait | DefKind::TraitAlias) {
|
||||||
|
traits.push(id.owner_id.to_def_id())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
tcx.arena.alloc_slice(&traits)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub(super) fn trait_impls_in_crate_provider(tcx: TyCtxt<'_>, _: LocalCrate) -> &[DefId] {
|
||||||
|
let mut trait_impls = Vec::new();
|
||||||
|
for id in tcx.hir().items() {
|
||||||
|
if matches!(tcx.def_kind(id.owner_id), DefKind::Impl { .. })
|
||||||
|
&& tcx.impl_trait_ref(id.owner_id).is_some()
|
||||||
|
{
|
||||||
|
trait_impls.push(id.owner_id.to_def_id())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
tcx.arena.alloc_slice(&trait_impls)
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user