diff options
| author | Vadim Petrochenkov <vadim.petrochenkov@gmail.com> | 2019-10-20 12:49:14 +0300 |
|---|---|---|
| committer | Vadim Petrochenkov <vadim.petrochenkov@gmail.com> | 2019-10-24 20:54:16 +0300 |
| commit | c5fee33e7aa71d7cfc5abd8848a81924cafd2b15 (patch) | |
| tree | 3f500021171d4ad9b3717a610a6f85d229f2fd33 | |
| parent | 3534ca8f4985afad9b8dfe93ab570b721b80210e (diff) | |
| download | rust-c5fee33e7aa71d7cfc5abd8848a81924cafd2b15.tar.gz rust-c5fee33e7aa71d7cfc5abd8848a81924cafd2b15.zip | |
rustc_metadata: Remove `RwLock` from `CStore`
| -rw-r--r-- | src/librustc_metadata/creader.rs | 26 | ||||
| -rw-r--r-- | src/librustc_metadata/cstore.rs | 25 |
2 files changed, 26 insertions, 25 deletions
diff --git a/src/librustc_metadata/creader.rs b/src/librustc_metadata/creader.rs index 5f4abbc3bdc..420595a690d 100644 --- a/src/librustc_metadata/creader.rs +++ b/src/librustc_metadata/creader.rs @@ -179,7 +179,7 @@ impl<'a> CrateLoader<'a> { } fn register_crate( - &self, + &mut self, host_lib: Option<Library>, root: Option<&CratePaths>, span: Span, @@ -319,7 +319,7 @@ impl<'a> CrateLoader<'a> { } fn resolve_crate<'b>( - &'b self, + &'b mut self, name: Symbol, span: Span, dep_kind: DepKind, @@ -329,7 +329,7 @@ impl<'a> CrateLoader<'a> { } fn maybe_resolve_crate<'b>( - &'b self, + &'b mut self, name: Symbol, span: Span, mut dep_kind: DepKind, @@ -458,7 +458,7 @@ impl<'a> CrateLoader<'a> { } // Go through the crate metadata and load any crates that it references - fn resolve_crate_deps(&self, + fn resolve_crate_deps(&mut self, root: &CratePaths, crate_root: &CrateRoot<'_>, metadata: &MetadataBlob, @@ -519,7 +519,7 @@ impl<'a> CrateLoader<'a> { decls } - fn inject_panic_runtime(&self, krate: &ast::Crate) { + fn inject_panic_runtime(&mut self, krate: &ast::Crate) { // If we're only compiling an rlib, then there's no need to select a // panic runtime, so we just skip this section entirely. let any_non_rlib = self.sess.crate_types.borrow().iter().any(|ct| { @@ -600,7 +600,7 @@ impl<'a> CrateLoader<'a> { &|data| data.root.needs_panic_runtime); } - fn inject_sanitizer_runtime(&self) { + fn inject_sanitizer_runtime(&mut self) { if let Some(ref sanitizer) = self.sess.opts.debugging_opts.sanitizer { // Sanitizers can only be used on some tested platforms with // executables linked to `std` @@ -698,7 +698,7 @@ impl<'a> CrateLoader<'a> { } } - fn inject_profiler_runtime(&self) { + fn inject_profiler_runtime(&mut self) { if self.sess.opts.debugging_opts.profile || self.sess.opts.cg.profile_generate.enabled() { @@ -852,7 +852,7 @@ impl<'a> CrateLoader<'a> { }); } - pub fn postprocess(&self, krate: &ast::Crate) { + pub fn postprocess(&mut self, krate: &ast::Crate) { self.inject_sanitizer_runtime(); self.inject_profiler_runtime(); self.inject_allocator_crate(krate); @@ -863,7 +863,11 @@ impl<'a> CrateLoader<'a> { } } - pub fn process_extern_crate(&self, item: &ast::Item, definitions: &Definitions) -> CrateNum { + pub fn process_extern_crate( + &mut self, + item: &ast::Item, + definitions: &Definitions, + ) -> CrateNum { match item.kind { ast::ItemKind::ExternCrate(orig_name) => { debug!("resolving extern crate stmt. ident: {} orig_name: {:?}", @@ -902,7 +906,7 @@ impl<'a> CrateLoader<'a> { } } - pub fn process_path_extern(&self, name: Symbol, span: Span) -> CrateNum { + pub fn process_path_extern(&mut self, name: Symbol, span: Span) -> CrateNum { let cnum = self.resolve_crate(name, span, DepKind::Explicit, None).0; self.update_extern_crate( @@ -920,7 +924,7 @@ impl<'a> CrateLoader<'a> { cnum } - pub fn maybe_process_path_extern(&self, name: Symbol, span: Span) -> Option<CrateNum> { + pub fn maybe_process_path_extern(&mut self, name: Symbol, span: Span) -> Option<CrateNum> { let cnum = self.maybe_resolve_crate(name, span, DepKind::Explicit, None).ok()?.0; self.update_extern_crate( diff --git a/src/librustc_metadata/cstore.rs b/src/librustc_metadata/cstore.rs index 09d37a00703..a0589b1f3bd 100644 --- a/src/librustc_metadata/cstore.rs +++ b/src/librustc_metadata/cstore.rs @@ -97,7 +97,7 @@ crate struct CrateMetadata { #[derive(Clone)] pub struct CStore { - metas: RwLock<IndexVec<CrateNum, Option<Lrc<CrateMetadata>>>>, + metas: IndexVec<CrateNum, Option<Lrc<CrateMetadata>>>, } pub enum LoadedMacro { @@ -112,34 +112,31 @@ impl Default for CStore { // order to make array indices in `metas` match with the // corresponding `CrateNum`. This first entry will always remain // `None`. - metas: RwLock::new(IndexVec::from_elem_n(None, 1)), + metas: IndexVec::from_elem_n(None, 1), } } } impl CStore { - crate fn alloc_new_crate_num(&self) -> CrateNum { - let mut metas = self.metas.borrow_mut(); - let cnum = CrateNum::new(metas.len()); - metas.push(None); - cnum + crate fn alloc_new_crate_num(&mut self) -> CrateNum { + self.metas.push(None); + CrateNum::new(self.metas.len() - 1) } crate fn get_crate_data(&self, cnum: CrateNum) -> Lrc<CrateMetadata> { - self.metas.borrow()[cnum].clone() + self.metas[cnum].clone() .unwrap_or_else(|| panic!("Failed to get crate data for {:?}", cnum)) } - crate fn set_crate_data(&self, cnum: CrateNum, data: Lrc<CrateMetadata>) { - let mut metas = self.metas.borrow_mut(); - assert!(metas[cnum].is_none(), "Overwriting crate metadata entry"); - metas[cnum] = Some(data); + crate fn set_crate_data(&mut self, cnum: CrateNum, data: Lrc<CrateMetadata>) { + assert!(self.metas[cnum].is_none(), "Overwriting crate metadata entry"); + self.metas[cnum] = Some(data); } crate fn iter_crate_data<I>(&self, mut i: I) where I: FnMut(CrateNum, &Lrc<CrateMetadata>) { - for (k, v) in self.metas.borrow().iter_enumerated() { + for (k, v) in self.metas.iter_enumerated() { if let &Some(ref v) = v { i(k, v); } @@ -170,7 +167,7 @@ impl CStore { crate fn do_postorder_cnums_untracked(&self) -> Vec<CrateNum> { let mut ordering = Vec::new(); - for (num, v) in self.metas.borrow().iter_enumerated() { + for (num, v) in self.metas.iter_enumerated() { if let &Some(_) = v { self.push_dependencies_in_postorder(&mut ordering, num); } |
