Skip to content

Commit 4ea10f9

Browse files
committed
Remove local crate provider for number of defs
Use `iter_local_def_id` instead.
1 parent 8982543 commit 4ea10f9

File tree

5 files changed

+28
-16
lines changed

5 files changed

+28
-16
lines changed

compiler/rustc_metadata/src/rmeta/decoder/cstore_impl.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -387,7 +387,7 @@ provide! { tcx, def_id, other, cdata,
387387
crate_hash => { cdata.root.header.hash }
388388
crate_host_hash => { cdata.host_hash }
389389
crate_name => { cdata.root.header.name }
390-
num_def_ids => { cdata.num_def_ids() }
390+
num_extern_def_ids => { cdata.num_def_ids() }
391391

392392
extra_filename => { cdata.root.extra_filename.clone() }
393393

compiler/rustc_middle/src/hir/mod.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -233,5 +233,4 @@ pub fn provide(providers: &mut Providers) {
233233
providers.in_scope_traits_map = |tcx, id| {
234234
tcx.hir_crate(()).owners[id.def_id].as_owner().map(|owner_info| &owner_info.trait_map)
235235
};
236-
providers.num_def_ids = |tcx, _| tcx.definitions_untracked().num_definitions();
237236
}

compiler/rustc_middle/src/query/mod.rs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1812,10 +1812,12 @@ rustc_queries! {
18121812
desc { |tcx| "computing crate imported by `{}`", tcx.def_path_str(def_id) }
18131813
}
18141814

1815-
/// Gets the number of definitions in this crate.
1815+
/// Gets the number of definitions in a foreign crate.
18161816
///
1817-
/// This allows external tools to iterate over all definitions in a crate.
1818-
query num_def_ids(_: CrateNum) -> usize {
1817+
/// This allows external tools to iterate over all definitions in a foreign crate.
1818+
///
1819+
/// This should never be used for the local crate, instead use `iter_local_def_id`.
1820+
query num_extern_def_ids(_: CrateNum) -> usize {
18191821
desc { "fetching the number of definitions in a crate" }
18201822
separate_provide_extern
18211823
}

compiler/rustc_smir/src/rustc_smir/context.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ use stable_mir::{Crate, CrateDef, CrateItem, CrateNum, DefId, Error, Filename, I
3434

3535
use crate::rustc_internal::RustcInternal;
3636
use crate::rustc_smir::builder::BodyBuilder;
37-
use crate::rustc_smir::{Stable, Tables, alloc, new_item_kind, smir_crate};
37+
use crate::rustc_smir::{Stable, Tables, alloc, filter_def_ids, new_item_kind, smir_crate};
3838

3939
impl<'tcx> Context for TablesWrapper<'tcx> {
4040
fn target_info(&self) -> MachineInfo {
@@ -84,14 +84,14 @@ impl<'tcx> Context for TablesWrapper<'tcx> {
8484
let mut tables = self.0.borrow_mut();
8585
let tcx = tables.tcx;
8686
let krate = crate_num.internal(&mut *tables, tcx);
87-
tables.iter_def_ids(tcx, krate).filter_map(|def_id| tables.to_fn_def(tcx, def_id)).collect()
87+
filter_def_ids(tcx, krate, |def_id| tables.to_fn_def(def_id))
8888
}
8989

9090
fn crate_statics(&self, crate_num: CrateNum) -> Vec<StaticDef> {
9191
let mut tables = self.0.borrow_mut();
9292
let tcx = tables.tcx;
9393
let krate = crate_num.internal(&mut *tables, tcx);
94-
tables.iter_def_ids(tcx, krate).filter_map(|def_id| tables.to_static(tcx, def_id)).collect()
94+
filter_def_ids(tcx, krate, |def_id| tables.to_static(def_id))
9595
}
9696

9797
fn foreign_module(

compiler/rustc_smir/src/rustc_smir/mod.rs

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -80,23 +80,34 @@ impl<'tcx> Tables<'tcx> {
8080
!must_override && self.tcx.is_mir_available(def_id)
8181
}
8282

83-
fn to_fn_def(&mut self, tcx: TyCtxt<'tcx>, def_id: DefId) -> Option<FnDef> {
84-
if matches!(tcx.def_kind(def_id), DefKind::Fn | DefKind::AssocFn) {
83+
fn to_fn_def(&mut self, def_id: DefId) -> Option<FnDef> {
84+
if matches!(self.tcx.def_kind(def_id), DefKind::Fn | DefKind::AssocFn) {
8585
Some(self.fn_def(def_id))
8686
} else {
8787
None
8888
}
8989
}
9090

91-
fn to_static(&mut self, tcx: TyCtxt<'tcx>, def_id: DefId) -> Option<StaticDef> {
92-
matches!(tcx.def_kind(def_id), DefKind::Static { .. }).then(|| self.static_def(def_id))
91+
fn to_static(&mut self, def_id: DefId) -> Option<StaticDef> {
92+
matches!(self.tcx.def_kind(def_id), DefKind::Static { .. }).then(|| self.static_def(def_id))
9393
}
94+
}
9495

95-
/// Iterate over the definitions of the given crate.
96-
pub fn iter_def_ids(&self, tcx: TyCtxt<'tcx>, krate: CrateNum) -> impl Iterator<Item = DefId> {
97-
let num_definitions = tcx.num_def_ids(krate);
96+
/// Iterate over the definitions of the given crate.
97+
pub(crate) fn filter_def_ids<F, T>(tcx: TyCtxt<'_>, krate: CrateNum, mut func: F) -> Vec<T>
98+
where
99+
F: FnMut(DefId) -> Option<T>,
100+
{
101+
if krate == LOCAL_CRATE {
102+
tcx.iter_local_def_id().filter_map(|did| func(did.to_def_id())).collect()
103+
} else {
104+
let num_definitions = tcx.num_extern_def_ids(krate);
98105
(0..num_definitions)
99-
.map(move |i| DefId { krate, index: rustc_span::def_id::DefIndex::from_usize(i) })
106+
.filter_map(move |i| {
107+
let def_id = DefId { krate, index: rustc_span::def_id::DefIndex::from_usize(i) };
108+
func(def_id)
109+
})
110+
.collect()
100111
}
101112
}
102113

0 commit comments

Comments
 (0)