Skip to content

Commit 41374d7

Browse files
committed
rustc_metadata: Move some code from impl CrateMetadataRef to impl CrateMetadata
1 parent c1df945 commit 41374d7

File tree

1 file changed

+87
-89
lines changed

1 file changed

+87
-89
lines changed

src/librustc_metadata/rmeta/decoder.rs

+87-89
Original file line numberDiff line numberDiff line change
@@ -559,51 +559,6 @@ impl CrateRoot<'_> {
559559
}
560560
}
561561

562-
impl CrateMetadata {
563-
crate fn new(
564-
sess: &Session,
565-
blob: MetadataBlob,
566-
root: CrateRoot<'static>,
567-
raw_proc_macros: Option<&'static [ProcMacro]>,
568-
cnum: CrateNum,
569-
cnum_map: CrateNumMap,
570-
dep_kind: DepKind,
571-
source: CrateSource,
572-
private_dep: bool,
573-
host_hash: Option<Svh>,
574-
) -> CrateMetadata {
575-
let def_path_table = record_time(&sess.perf_stats.decode_def_path_tables_time, || {
576-
root.def_path_table.decode((&blob, sess))
577-
});
578-
let trait_impls = root
579-
.impls
580-
.decode((&blob, sess))
581-
.map(|trait_impls| (trait_impls.trait_id, trait_impls.impls))
582-
.collect();
583-
let alloc_decoding_state =
584-
AllocDecodingState::new(root.interpret_alloc_index.decode(&blob).collect());
585-
let dependencies = Lock::new(cnum_map.iter().cloned().collect());
586-
CrateMetadata {
587-
blob,
588-
root,
589-
def_path_table,
590-
trait_impls,
591-
raw_proc_macros,
592-
source_map_import_info: Once::new(),
593-
alloc_decoding_state,
594-
dep_node_index: AtomicCell::new(DepNodeIndex::INVALID),
595-
cnum,
596-
cnum_map,
597-
dependencies,
598-
dep_kind: Lock::new(dep_kind),
599-
source,
600-
private_dep,
601-
host_hash,
602-
extern_crate: Lock::new(None),
603-
}
604-
}
605-
}
606-
607562
impl<'a, 'tcx> CrateMetadataRef<'a> {
608563
fn is_proc_macro(&self, id: DefIndex) -> bool {
609564
self.root.proc_macro_data.and_then(|data| data.decode(self).find(|x| *x == id)).is_some()
@@ -625,10 +580,6 @@ impl<'a, 'tcx> CrateMetadataRef<'a> {
625580
})
626581
}
627582

628-
fn local_def_id(&self, index: DefIndex) -> DefId {
629-
DefId { krate: self.cnum, index }
630-
}
631-
632583
fn raw_proc_macro(&self, id: DefIndex) -> &ProcMacro {
633584
// DefIndex's in root.proc_macro_data have a one-to-one correspondence
634585
// with items in 'raw_proc_macros'.
@@ -1194,18 +1145,6 @@ impl<'a, 'tcx> CrateMetadataRef<'a> {
11941145
.collect()
11951146
}
11961147

1197-
// Translate a DefId from the current compilation environment to a DefId
1198-
// for an external crate.
1199-
fn reverse_translate_def_id(&self, did: DefId) -> Option<DefId> {
1200-
for (local, &global) in self.cnum_map.iter_enumerated() {
1201-
if global == did.krate {
1202-
return Some(DefId { krate: local, index: did.index });
1203-
}
1204-
}
1205-
1206-
None
1207-
}
1208-
12091148
fn get_inherent_implementations_for_type(
12101149
&self,
12111150
tcx: TyCtxt<'tcx>,
@@ -1412,11 +1351,6 @@ impl<'a, 'tcx> CrateMetadataRef<'a> {
14121351
DefPath::make(self.cnum, id, |parent| self.def_key(parent))
14131352
}
14141353

1415-
#[inline]
1416-
fn def_path_hash(&self, index: DefIndex) -> DefPathHash {
1417-
self.def_path_table.def_path_hash(index)
1418-
}
1419-
14201354
/// Imports the source_map from an external crate into the source_map of the crate
14211355
/// currently being compiled (the "local crate").
14221356
///
@@ -1519,33 +1453,52 @@ impl<'a, 'tcx> CrateMetadataRef<'a> {
15191453
.collect()
15201454
})
15211455
}
1456+
}
15221457

1523-
/// Get the `DepNodeIndex` corresponding this crate. The result of this
1524-
/// method is cached in the `dep_node_index` field.
1525-
fn get_crate_dep_node_index(&self, tcx: TyCtxt<'tcx>) -> DepNodeIndex {
1526-
let mut dep_node_index = self.dep_node_index.load();
1527-
1528-
if unlikely!(dep_node_index == DepNodeIndex::INVALID) {
1529-
// We have not cached the DepNodeIndex for this upstream crate yet,
1530-
// so use the dep-graph to find it out and cache it.
1531-
// Note that multiple threads can enter this block concurrently.
1532-
// That is fine because the DepNodeIndex remains constant
1533-
// throughout the whole compilation session, and multiple stores
1534-
// would always write the same value.
1535-
1536-
let def_path_hash = self.def_path_hash(CRATE_DEF_INDEX);
1537-
let dep_node = def_path_hash.to_dep_node(dep_graph::DepKind::CrateMetadata);
1538-
1539-
dep_node_index = tcx.dep_graph.dep_node_index_of(&dep_node);
1540-
assert!(dep_node_index != DepNodeIndex::INVALID);
1541-
self.dep_node_index.store(dep_node_index);
1458+
impl CrateMetadata {
1459+
crate fn new(
1460+
sess: &Session,
1461+
blob: MetadataBlob,
1462+
root: CrateRoot<'static>,
1463+
raw_proc_macros: Option<&'static [ProcMacro]>,
1464+
cnum: CrateNum,
1465+
cnum_map: CrateNumMap,
1466+
dep_kind: DepKind,
1467+
source: CrateSource,
1468+
private_dep: bool,
1469+
host_hash: Option<Svh>,
1470+
) -> CrateMetadata {
1471+
let def_path_table = record_time(&sess.perf_stats.decode_def_path_tables_time, || {
1472+
root.def_path_table.decode((&blob, sess))
1473+
});
1474+
let trait_impls = root
1475+
.impls
1476+
.decode((&blob, sess))
1477+
.map(|trait_impls| (trait_impls.trait_id, trait_impls.impls))
1478+
.collect();
1479+
let alloc_decoding_state =
1480+
AllocDecodingState::new(root.interpret_alloc_index.decode(&blob).collect());
1481+
let dependencies = Lock::new(cnum_map.iter().cloned().collect());
1482+
CrateMetadata {
1483+
blob,
1484+
root,
1485+
def_path_table,
1486+
trait_impls,
1487+
raw_proc_macros,
1488+
source_map_import_info: Once::new(),
1489+
alloc_decoding_state,
1490+
dep_node_index: AtomicCell::new(DepNodeIndex::INVALID),
1491+
cnum,
1492+
cnum_map,
1493+
dependencies,
1494+
dep_kind: Lock::new(dep_kind),
1495+
source,
1496+
private_dep,
1497+
host_hash,
1498+
extern_crate: Lock::new(None),
15421499
}
1543-
1544-
dep_node_index
15451500
}
1546-
}
15471501

1548-
impl CrateMetadata {
15491502
crate fn dependencies(&self) -> LockGuard<'_, Vec<CrateNum>> {
15501503
self.dependencies.borrow()
15511504
}
@@ -1618,6 +1571,51 @@ impl CrateMetadata {
16181571
crate fn hash(&self) -> Svh {
16191572
self.root.hash
16201573
}
1574+
1575+
fn local_def_id(&self, index: DefIndex) -> DefId {
1576+
DefId { krate: self.cnum, index }
1577+
}
1578+
1579+
// Translate a DefId from the current compilation environment to a DefId
1580+
// for an external crate.
1581+
fn reverse_translate_def_id(&self, did: DefId) -> Option<DefId> {
1582+
for (local, &global) in self.cnum_map.iter_enumerated() {
1583+
if global == did.krate {
1584+
return Some(DefId { krate: local, index: did.index });
1585+
}
1586+
}
1587+
1588+
None
1589+
}
1590+
1591+
#[inline]
1592+
fn def_path_hash(&self, index: DefIndex) -> DefPathHash {
1593+
self.def_path_table.def_path_hash(index)
1594+
}
1595+
1596+
/// Get the `DepNodeIndex` corresponding this crate. The result of this
1597+
/// method is cached in the `dep_node_index` field.
1598+
fn get_crate_dep_node_index(&self, tcx: TyCtxt<'tcx>) -> DepNodeIndex {
1599+
let mut dep_node_index = self.dep_node_index.load();
1600+
1601+
if unlikely!(dep_node_index == DepNodeIndex::INVALID) {
1602+
// We have not cached the DepNodeIndex for this upstream crate yet,
1603+
// so use the dep-graph to find it out and cache it.
1604+
// Note that multiple threads can enter this block concurrently.
1605+
// That is fine because the DepNodeIndex remains constant
1606+
// throughout the whole compilation session, and multiple stores
1607+
// would always write the same value.
1608+
1609+
let def_path_hash = self.def_path_hash(CRATE_DEF_INDEX);
1610+
let dep_node = def_path_hash.to_dep_node(dep_graph::DepKind::CrateMetadata);
1611+
1612+
dep_node_index = tcx.dep_graph.dep_node_index_of(&dep_node);
1613+
assert!(dep_node_index != DepNodeIndex::INVALID);
1614+
self.dep_node_index.store(dep_node_index);
1615+
}
1616+
1617+
dep_node_index
1618+
}
16211619
}
16221620

16231621
// Cannot be implemented on 'ProcMacro', as libproc_macro

0 commit comments

Comments
 (0)