Prepare for CrateNum query feeding on creation

This commit is contained in:
Oli Scherer 2024-03-26 17:01:47 +00:00
parent 0025c9cc50
commit 9e63e991e9
2 changed files with 9 additions and 5 deletions

View File

@ -16,7 +16,7 @@ use rustc_fs_util::try_canonicalize;
use rustc_hir::def_id::{CrateNum, LocalDefId, StableCrateId, LOCAL_CRATE};
use rustc_hir::definitions::Definitions;
use rustc_index::IndexVec;
use rustc_middle::ty::TyCtxt;
use rustc_middle::ty::{TyCtxt, TyCtxtFeed};
use rustc_session::config::{self, CrateType, ExternLocation};
use rustc_session::cstore::{CrateDepKind, CrateSource, ExternCrate, ExternCrateSource};
use rustc_session::lint;
@ -166,7 +166,7 @@ impl CStore {
&mut self,
root: &CrateRoot,
tcx: TyCtxt<'tcx>,
) -> Result<CrateNum, CrateError> {
) -> Result<TyCtxtFeed<'tcx, CrateNum>, CrateError> {
assert_eq!(self.metas.len(), tcx.untracked().stable_crate_ids.read().len());
let num = tcx.create_crate_num(root.stable_crate_id()).map_err(|existing| {
// Check for (potential) conflicts with the local crate
@ -409,7 +409,8 @@ impl<'a, 'tcx> CrateLoader<'a, 'tcx> {
let private_dep = self.is_private_dep(name.as_str(), private_dep);
// Claim this crate number and cache it
let cnum = self.cstore.intern_stable_crate_id(&crate_root, self.tcx)?;
let feed = self.cstore.intern_stable_crate_id(&crate_root, self.tcx)?;
let cnum = feed.key();
info!(
"register crate `{}` (cnum = {}. private_dep = {})",

View File

@ -1261,14 +1261,17 @@ impl<'tcx> TyCtxt<'tcx> {
feed
}
pub fn create_crate_num(self, stable_crate_id: StableCrateId) -> Result<CrateNum, CrateNum> {
pub fn create_crate_num(
self,
stable_crate_id: StableCrateId,
) -> Result<TyCtxtFeed<'tcx, CrateNum>, CrateNum> {
if let Some(&existing) = self.untracked().stable_crate_ids.read().get(&stable_crate_id) {
return Err(existing);
}
let num = CrateNum::new(self.untracked().stable_crate_ids.read().len());
self.untracked().stable_crate_ids.write().insert(stable_crate_id, num);
Ok(num)
Ok(TyCtxtFeed { key: num, tcx: self })
}
pub fn iter_local_def_id(self) -> impl Iterator<Item = LocalDefId> + 'tcx {