@@ -1521,6 +1521,57 @@ impl<'a, 'tcx> CrateMetadataRef<'a> {
1521
1521
DefPath :: make ( self . cnum , id, |parent| self . def_key ( parent) )
1522
1522
}
1523
1523
1524
+ fn def_path_hash_unlocked (
1525
+ & self ,
1526
+ index : DefIndex ,
1527
+ def_path_hashes : & mut FxHashMap < DefIndex , DefPathHash > ,
1528
+ ) -> DefPathHash {
1529
+ * def_path_hashes. entry ( index) . or_insert_with ( || {
1530
+ self . root . tables . def_path_hashes . get ( self , index) . unwrap ( ) . decode ( self )
1531
+ } )
1532
+ }
1533
+
1534
+ #[ inline]
1535
+ fn def_path_hash ( & self , index : DefIndex ) -> DefPathHash {
1536
+ let mut def_path_hashes = self . def_path_hash_cache . lock ( ) ;
1537
+ self . def_path_hash_unlocked ( index, & mut def_path_hashes)
1538
+ }
1539
+
1540
+ fn all_def_path_hashes_and_def_ids ( & self ) -> Vec < ( DefPathHash , DefId ) > {
1541
+ let mut def_path_hashes = self . def_path_hash_cache . lock ( ) ;
1542
+ ( 0 ..self . num_def_ids ( ) )
1543
+ . map ( |index| {
1544
+ let index = DefIndex :: from_usize ( index) ;
1545
+ ( self . def_path_hash_unlocked ( index, & mut def_path_hashes) , self . local_def_id ( index) )
1546
+ } )
1547
+ . collect ( )
1548
+ }
1549
+
1550
+ /// Get the `DepNodeIndex` corresponding this crate. The result of this
1551
+ /// method is cached in the `dep_node_index` field.
1552
+ fn get_crate_dep_node_index ( & self , tcx : TyCtxt < ' tcx > ) -> DepNodeIndex {
1553
+ let mut dep_node_index = self . dep_node_index . load ( ) ;
1554
+
1555
+ if unlikely ! ( dep_node_index == DepNodeIndex :: INVALID ) {
1556
+ // We have not cached the DepNodeIndex for this upstream crate yet,
1557
+ // so use the dep-graph to find it out and cache it.
1558
+ // Note that multiple threads can enter this block concurrently.
1559
+ // That is fine because the DepNodeIndex remains constant
1560
+ // throughout the whole compilation session, and multiple stores
1561
+ // would always write the same value.
1562
+
1563
+ let def_path_hash = self . def_path_hash ( CRATE_DEF_INDEX ) ;
1564
+ let dep_node =
1565
+ DepNode :: from_def_path_hash ( def_path_hash, dep_graph:: DepKind :: CrateMetadata ) ;
1566
+
1567
+ dep_node_index = tcx. dep_graph . dep_node_index_of ( & dep_node) ;
1568
+ assert ! ( dep_node_index != DepNodeIndex :: INVALID ) ;
1569
+ self . dep_node_index . store ( dep_node_index) ;
1570
+ }
1571
+
1572
+ dep_node_index
1573
+ }
1574
+
1524
1575
/// Imports the source_map from an external crate into the source_map of the crate
1525
1576
/// currently being compiled (the "local crate").
1526
1577
///
@@ -1845,59 +1896,6 @@ impl CrateMetadata {
1845
1896
}
1846
1897
}
1847
1898
1848
- impl < ' a , ' tcx > CrateMetadataRef < ' a > {
1849
- fn def_path_hash_unlocked (
1850
- & self ,
1851
- index : DefIndex ,
1852
- def_path_hashes : & mut FxHashMap < DefIndex , DefPathHash > ,
1853
- ) -> DefPathHash {
1854
- * def_path_hashes. entry ( index) . or_insert_with ( || {
1855
- self . root . tables . def_path_hashes . get ( self , index) . unwrap ( ) . decode ( self )
1856
- } )
1857
- }
1858
-
1859
- #[ inline]
1860
- fn def_path_hash ( & self , index : DefIndex ) -> DefPathHash {
1861
- let mut def_path_hashes = self . def_path_hash_cache . lock ( ) ;
1862
- self . def_path_hash_unlocked ( index, & mut def_path_hashes)
1863
- }
1864
-
1865
- fn all_def_path_hashes_and_def_ids ( & self ) -> Vec < ( DefPathHash , DefId ) > {
1866
- let mut def_path_hashes = self . def_path_hash_cache . lock ( ) ;
1867
- ( 0 ..self . num_def_ids ( ) )
1868
- . map ( |index| {
1869
- let index = DefIndex :: from_usize ( index) ;
1870
- ( self . def_path_hash_unlocked ( index, & mut def_path_hashes) , self . local_def_id ( index) )
1871
- } )
1872
- . collect ( )
1873
- }
1874
-
1875
- /// Get the `DepNodeIndex` corresponding this crate. The result of this
1876
- /// method is cached in the `dep_node_index` field.
1877
- fn get_crate_dep_node_index ( & self , tcx : TyCtxt < ' tcx > ) -> DepNodeIndex {
1878
- let mut dep_node_index = self . dep_node_index . load ( ) ;
1879
-
1880
- if unlikely ! ( dep_node_index == DepNodeIndex :: INVALID ) {
1881
- // We have not cached the DepNodeIndex for this upstream crate yet,
1882
- // so use the dep-graph to find it out and cache it.
1883
- // Note that multiple threads can enter this block concurrently.
1884
- // That is fine because the DepNodeIndex remains constant
1885
- // throughout the whole compilation session, and multiple stores
1886
- // would always write the same value.
1887
-
1888
- let def_path_hash = self . def_path_hash ( CRATE_DEF_INDEX ) ;
1889
- let dep_node =
1890
- DepNode :: from_def_path_hash ( def_path_hash, dep_graph:: DepKind :: CrateMetadata ) ;
1891
-
1892
- dep_node_index = tcx. dep_graph . dep_node_index_of ( & dep_node) ;
1893
- assert ! ( dep_node_index != DepNodeIndex :: INVALID ) ;
1894
- self . dep_node_index . store ( dep_node_index) ;
1895
- }
1896
-
1897
- dep_node_index
1898
- }
1899
- }
1900
-
1901
1899
// Cannot be implemented on 'ProcMacro', as libproc_macro
1902
1900
// does not depend on librustc_ast
1903
1901
fn macro_kind ( raw : & ProcMacro ) -> MacroKind {
0 commit comments