Skip to content

Commit ff3e06f

Browse files
committed
rustc_metadata: Give a constructor to CrateMetadata
1 parent bdce69d commit ff3e06f

File tree

2 files changed

+53
-34
lines changed

2 files changed

+53
-34
lines changed

src/librustc_metadata/creader.rs

Lines changed: 9 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,15 @@
33
use crate::cstore::{self, CStore};
44
use crate::locator::{CrateLocator, CratePaths};
55
use crate::rmeta::{CrateRoot, CrateDep, MetadataBlob};
6-
use rustc_data_structures::sync::{Lock, Once, AtomicCell};
76

87
use rustc::hir::def_id::CrateNum;
98
use rustc_data_structures::svh::Svh;
10-
use rustc::dep_graph::DepNodeIndex;
119
use rustc::middle::cstore::DepKind;
12-
use rustc::mir::interpret::AllocDecodingState;
1310
use rustc::session::{Session, CrateDisambiguator};
1411
use rustc::session::config::{Sanitizer, self};
1512
use rustc_target::spec::{PanicStrategy, TargetTriple};
1613
use rustc::session::search_paths::PathKind;
1714
use rustc::middle::cstore::{CrateSource, ExternCrate, ExternCrateSource, MetadataLoaderDyn};
18-
use rustc::util::common::record_time;
1915
use rustc::util::nodemap::FxHashSet;
2016
use rustc::hir::map::Definitions;
2117
use rustc::hir::def_id::LOCAL_CRATE;
@@ -217,8 +213,6 @@ impl<'a> CrateLoader<'a> {
217213

218214
let cnum_map = self.resolve_crate_deps(root, &crate_root, &metadata, cnum, span, dep_kind);
219215

220-
let dependencies: Vec<CrateNum> = cnum_map.iter().cloned().collect();
221-
222216
let raw_proc_macros = crate_root.proc_macro_data.map(|_| {
223217
let temp_root;
224218
let (dlsym_source, dlsym_root) = match &host_lib {
@@ -230,37 +224,18 @@ impl<'a> CrateLoader<'a> {
230224
self.dlsym_proc_macros(&dlsym_dylib.0, dlsym_root.disambiguator, span)
231225
});
232226

233-
let interpret_alloc_index: Vec<u32> = crate_root.interpret_alloc_index
234-
.decode(&metadata)
235-
.collect();
236-
let trait_impls = crate_root
237-
.impls
238-
.decode((&metadata, self.sess))
239-
.map(|trait_impls| (trait_impls.trait_id, trait_impls.impls))
240-
.collect();
241-
242-
let def_path_table = record_time(&self.sess.perf_stats.decode_def_path_tables_time, || {
243-
crate_root.def_path_table.decode((&metadata, self.sess))
244-
});
245-
246-
self.cstore.set_crate_data(cnum, cstore::CrateMetadata {
247-
extern_crate: Lock::new(None),
248-
def_path_table,
249-
trait_impls,
250-
root: crate_root,
251-
host_hash,
252-
blob: metadata,
253-
cnum_map,
227+
self.cstore.set_crate_data(cnum, cstore::CrateMetadata::new(
228+
self.sess,
229+
metadata,
230+
crate_root,
231+
raw_proc_macros,
254232
cnum,
255-
dependencies: Lock::new(dependencies),
256-
source_map_import_info: Once::new(),
257-
alloc_decoding_state: AllocDecodingState::new(interpret_alloc_index),
258-
dep_kind: Lock::new(dep_kind),
233+
cnum_map,
234+
dep_kind,
259235
source,
260236
private_dep,
261-
raw_proc_macros,
262-
dep_node_index: AtomicCell::new(DepNodeIndex::INVALID),
263-
});
237+
host_hash,
238+
));
264239

265240
cnum
266241
}

src/librustc_metadata/cstore.rs

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,9 @@ use rustc::hir::def_id::{CrateNum, DefIndex};
77
use rustc::hir::map::definitions::DefPathTable;
88
use rustc::middle::cstore::{CrateSource, DepKind, ExternCrate};
99
use rustc::mir::interpret::AllocDecodingState;
10+
use rustc::session::Session;
1011
use rustc_index::vec::IndexVec;
12+
use rustc::util::common::record_time;
1113
use rustc::util::nodemap::FxHashMap;
1214
use rustc_data_structures::sync::{Lrc, Lock, Once, AtomicCell};
1315
use rustc_data_structures::svh::Svh;
@@ -97,6 +99,48 @@ pub enum LoadedMacro {
9799
ProcMacro(SyntaxExtension),
98100
}
99101

102+
impl CrateMetadata {
103+
crate fn new(
104+
sess: &Session,
105+
blob: MetadataBlob,
106+
root: CrateRoot<'static>,
107+
raw_proc_macros: Option<&'static [ProcMacro]>,
108+
cnum: CrateNum,
109+
cnum_map: CrateNumMap,
110+
dep_kind: DepKind,
111+
source: CrateSource,
112+
private_dep: bool,
113+
host_hash: Option<Svh>,
114+
) -> CrateMetadata {
115+
let def_path_table = record_time(&sess.perf_stats.decode_def_path_tables_time, || {
116+
root.def_path_table.decode((&blob, sess))
117+
});
118+
let trait_impls = root.impls.decode((&blob, sess))
119+
.map(|trait_impls| (trait_impls.trait_id, trait_impls.impls)).collect();
120+
let alloc_decoding_state =
121+
AllocDecodingState::new(root.interpret_alloc_index.decode(&blob).collect());
122+
let dependencies = Lock::new(cnum_map.iter().cloned().collect());
123+
CrateMetadata {
124+
blob,
125+
root,
126+
def_path_table,
127+
trait_impls,
128+
raw_proc_macros,
129+
source_map_import_info: Once::new(),
130+
alloc_decoding_state,
131+
dep_node_index: AtomicCell::new(DepNodeIndex::INVALID),
132+
cnum,
133+
cnum_map,
134+
dependencies,
135+
dep_kind: Lock::new(dep_kind),
136+
source,
137+
private_dep,
138+
host_hash,
139+
extern_crate: Lock::new(None),
140+
}
141+
}
142+
}
143+
100144
impl Default for CStore {
101145
fn default() -> Self {
102146
CStore {

0 commit comments

Comments
 (0)