diff options
| author | Oli Scherer <git-spam-no-reply9815368754983@oli-obk.de> | 2024-03-26 17:01:47 +0000 |
|---|---|---|
| committer | Oli Scherer <git-spam-no-reply9815368754983@oli-obk.de> | 2024-04-19 14:16:18 +0000 |
| commit | 9e63e991e9690122df470f1fd6931a99bcc5e324 (patch) | |
| tree | 2fe88a1c9a60d7b831f3d5a127582d8d77380e1a | |
| parent | 0025c9cc5001c194ac1f8ce4824d93a0efbe5c18 (diff) | |
| download | rust-9e63e991e9690122df470f1fd6931a99bcc5e324.tar.gz rust-9e63e991e9690122df470f1fd6931a99bcc5e324.zip | |
Prepare for `CrateNum` query feeding on creation
| -rw-r--r-- | compiler/rustc_metadata/src/creader.rs | 7 | ||||
| -rw-r--r-- | compiler/rustc_middle/src/ty/context.rs | 7 |
2 files changed, 9 insertions, 5 deletions
diff --git a/compiler/rustc_metadata/src/creader.rs b/compiler/rustc_metadata/src/creader.rs index 83fe39baf1f..888c2427d8f 100644 --- a/compiler/rustc_metadata/src/creader.rs +++ b/compiler/rustc_metadata/src/creader.rs @@ -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 = {})", diff --git a/compiler/rustc_middle/src/ty/context.rs b/compiler/rustc_middle/src/ty/context.rs index 3832fecfee4..b5769e6fee2 100644 --- a/compiler/rustc_middle/src/ty/context.rs +++ b/compiler/rustc_middle/src/ty/context.rs @@ -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 { |
