Skip to content

Commit

Permalink
return crates instead of a crate
Browse files Browse the repository at this point in the history
  • Loading branch information
ouz-a committed Oct 9, 2023
1 parent bf9a1c8 commit 4ff6e87
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 11 deletions.
17 changes: 12 additions & 5 deletions compiler/rustc_smir/src/rustc_smir/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -31,11 +31,18 @@ impl<'tcx> Context for Tables<'tcx> {
self.tcx.crates(()).iter().map(|crate_num| smir_crate(self.tcx, *crate_num)).collect()
}

fn find_crate(&self, name: &str) -> Option<stable_mir::Crate> {
[LOCAL_CRATE].iter().chain(self.tcx.crates(()).iter()).find_map(|crate_num| {
let crate_name = self.tcx.crate_name(*crate_num).to_string();
(name == crate_name).then(|| smir_crate(self.tcx, *crate_num))
})
fn find_crates(&self, name: &str) -> Vec<stable_mir::Crate> {
let crates: Vec<stable_mir::Crate> = [LOCAL_CRATE]
.iter()
.chain(self.tcx.crates(()).iter())
.map(|crate_num| {
let crate_name = self.tcx.crate_name(*crate_num).to_string();
(name == crate_name).then(|| smir_crate(self.tcx, *crate_num))
})
.into_iter()
.filter_map(|c| c)
.collect();
crates
}

fn name_of_def_id(&self, def_id: stable_mir::DefId) -> String {
Expand Down
8 changes: 4 additions & 4 deletions compiler/stable_mir/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -125,9 +125,9 @@ pub fn local_crate() -> Crate {
with(|cx| cx.local_crate())
}

/// Try to find a crate with the given name.
pub fn find_crate(name: &str) -> Option<Crate> {
with(|cx| cx.find_crate(name))
/// Try to find a crate or crates if multiple crates exist from given name.
pub fn find_crates(name: &str) -> Vec<Crate> {
with(|cx| cx.find_crates(name))
}

/// Try to find a crate with the given name.
Expand Down Expand Up @@ -174,7 +174,7 @@ pub trait Context {
fn external_crates(&self) -> Vec<Crate>;

/// Find a crate with the given name.
fn find_crate(&self, name: &str) -> Option<Crate>;
fn find_crates(&self, name: &str) -> Vec<Crate>;

/// Prints the name of given `DefId`
fn name_of_def_id(&self, def_id: DefId) -> String;
Expand Down
4 changes: 2 additions & 2 deletions tests/ui-fulldeps/stable-mir/crate-info.rs
Original file line number Diff line number Diff line change
Expand Up @@ -38,8 +38,8 @@ fn test_stable_mir(_tcx: TyCtxt<'_>) -> ControlFlow<()> {
let items = stable_mir::all_local_items();
assert!(get_item(&items, (DefKind::Fn, "foo::bar")).is_some());

// Find the `std` crate.
assert!(stable_mir::find_crate("std").is_some());
// Find the `std` crate and assert that there is only one of it.
assert!(stable_mir::find_crates("std").len() == 1);

let bar = get_item(&items, (DefKind::Fn, "bar")).unwrap();
let body = bar.body();
Expand Down

0 comments on commit 4ff6e87

Please sign in to comment.