diff options
| author | Vadim Petrochenkov <vadim.petrochenkov@gmail.com> | 2019-11-17 15:27:49 +0300 |
|---|---|---|
| committer | Vadim Petrochenkov <vadim.petrochenkov@gmail.com> | 2019-11-17 20:12:50 +0300 |
| commit | ff3e06fbe67264eab91743bba61024598b9a4b1e (patch) | |
| tree | 4d2e6e0a68c4fec2c7b0db6efd9c4acca958afae | |
| parent | bdce69dd8328138383c6e4f4b13c06e371f7400d (diff) | |
| download | rust-ff3e06fbe67264eab91743bba61024598b9a4b1e.tar.gz rust-ff3e06fbe67264eab91743bba61024598b9a4b1e.zip | |
rustc_metadata: Give a constructor to `CrateMetadata`
| -rw-r--r-- | src/librustc_metadata/creader.rs | 43 | ||||
| -rw-r--r-- | src/librustc_metadata/cstore.rs | 44 |
2 files changed, 53 insertions, 34 deletions
diff --git a/src/librustc_metadata/creader.rs b/src/librustc_metadata/creader.rs index 7a2dcf2818e..6d5bd5d3a09 100644 --- a/src/librustc_metadata/creader.rs +++ b/src/librustc_metadata/creader.rs @@ -3,19 +3,15 @@ use crate::cstore::{self, CStore}; use crate::locator::{CrateLocator, CratePaths}; use crate::rmeta::{CrateRoot, CrateDep, MetadataBlob}; -use rustc_data_structures::sync::{Lock, Once, AtomicCell}; use rustc::hir::def_id::CrateNum; use rustc_data_structures::svh::Svh; -use rustc::dep_graph::DepNodeIndex; use rustc::middle::cstore::DepKind; -use rustc::mir::interpret::AllocDecodingState; use rustc::session::{Session, CrateDisambiguator}; use rustc::session::config::{Sanitizer, self}; use rustc_target::spec::{PanicStrategy, TargetTriple}; use rustc::session::search_paths::PathKind; use rustc::middle::cstore::{CrateSource, ExternCrate, ExternCrateSource, MetadataLoaderDyn}; -use rustc::util::common::record_time; use rustc::util::nodemap::FxHashSet; use rustc::hir::map::Definitions; use rustc::hir::def_id::LOCAL_CRATE; @@ -217,8 +213,6 @@ impl<'a> CrateLoader<'a> { let cnum_map = self.resolve_crate_deps(root, &crate_root, &metadata, cnum, span, dep_kind); - let dependencies: Vec<CrateNum> = cnum_map.iter().cloned().collect(); - let raw_proc_macros = crate_root.proc_macro_data.map(|_| { let temp_root; let (dlsym_source, dlsym_root) = match &host_lib { @@ -230,37 +224,18 @@ impl<'a> CrateLoader<'a> { self.dlsym_proc_macros(&dlsym_dylib.0, dlsym_root.disambiguator, span) }); - let interpret_alloc_index: Vec<u32> = crate_root.interpret_alloc_index - .decode(&metadata) - .collect(); - let trait_impls = crate_root - .impls - .decode((&metadata, self.sess)) - .map(|trait_impls| (trait_impls.trait_id, trait_impls.impls)) - .collect(); - - let def_path_table = record_time(&self.sess.perf_stats.decode_def_path_tables_time, || { - crate_root.def_path_table.decode((&metadata, self.sess)) - }); - - self.cstore.set_crate_data(cnum, cstore::CrateMetadata { - extern_crate: Lock::new(None), - def_path_table, - trait_impls, - root: crate_root, - host_hash, - blob: metadata, - cnum_map, + self.cstore.set_crate_data(cnum, cstore::CrateMetadata::new( + self.sess, + metadata, + crate_root, + raw_proc_macros, cnum, - dependencies: Lock::new(dependencies), - source_map_import_info: Once::new(), - alloc_decoding_state: AllocDecodingState::new(interpret_alloc_index), - dep_kind: Lock::new(dep_kind), + cnum_map, + dep_kind, source, private_dep, - raw_proc_macros, - dep_node_index: AtomicCell::new(DepNodeIndex::INVALID), - }); + host_hash, + )); cnum } diff --git a/src/librustc_metadata/cstore.rs b/src/librustc_metadata/cstore.rs index 7d640422dfc..d19f05619d9 100644 --- a/src/librustc_metadata/cstore.rs +++ b/src/librustc_metadata/cstore.rs @@ -7,7 +7,9 @@ use rustc::hir::def_id::{CrateNum, DefIndex}; use rustc::hir::map::definitions::DefPathTable; use rustc::middle::cstore::{CrateSource, DepKind, ExternCrate}; use rustc::mir::interpret::AllocDecodingState; +use rustc::session::Session; use rustc_index::vec::IndexVec; +use rustc::util::common::record_time; use rustc::util::nodemap::FxHashMap; use rustc_data_structures::sync::{Lrc, Lock, Once, AtomicCell}; use rustc_data_structures::svh::Svh; @@ -97,6 +99,48 @@ pub enum LoadedMacro { ProcMacro(SyntaxExtension), } +impl CrateMetadata { + crate fn new( + sess: &Session, + blob: MetadataBlob, + root: CrateRoot<'static>, + raw_proc_macros: Option<&'static [ProcMacro]>, + cnum: CrateNum, + cnum_map: CrateNumMap, + dep_kind: DepKind, + source: CrateSource, + private_dep: bool, + host_hash: Option<Svh>, + ) -> CrateMetadata { + let def_path_table = record_time(&sess.perf_stats.decode_def_path_tables_time, || { + root.def_path_table.decode((&blob, sess)) + }); + let trait_impls = root.impls.decode((&blob, sess)) + .map(|trait_impls| (trait_impls.trait_id, trait_impls.impls)).collect(); + let alloc_decoding_state = + AllocDecodingState::new(root.interpret_alloc_index.decode(&blob).collect()); + let dependencies = Lock::new(cnum_map.iter().cloned().collect()); + CrateMetadata { + blob, + root, + def_path_table, + trait_impls, + raw_proc_macros, + source_map_import_info: Once::new(), + alloc_decoding_state, + dep_node_index: AtomicCell::new(DepNodeIndex::INVALID), + cnum, + cnum_map, + dependencies, + dep_kind: Lock::new(dep_kind), + source, + private_dep, + host_hash, + extern_crate: Lock::new(None), + } + } +} + impl Default for CStore { fn default() -> Self { CStore { |
