@@ -1136,14 +1136,12 @@ pub fn decode_expn_id_incrcomp<D: Decoder>(
11361136 Ok ( expn_id)
11371137}
11381138
1139- pub fn decode_expn_id < ' a , D : Decoder > (
1139+ pub fn decode_expn_id < D : Decoder > (
11401140 d : & mut D ,
1141- get_context : impl FnOnce ( CrateNum ) -> & ' a HygieneDecodeContext ,
1142- decode_data : impl FnOnce ( & mut D , u32 ) -> Result < ( ExpnData , ExpnHash ) , D :: Error > ,
1141+ decode_data : impl FnOnce ( CrateNum , u32 ) -> ( ExpnData , ExpnHash ) ,
11431142) -> Result < ExpnId , D :: Error > {
11441143 let index = u32:: decode ( d) ?;
11451144 let krate = CrateNum :: decode ( d) ?;
1146- let context = get_context ( krate) ;
11471145
11481146 // Do this after decoding, so that we decode a `CrateNum`
11491147 // if necessary
@@ -1152,49 +1150,29 @@ pub fn decode_expn_id<'a, D: Decoder>(
11521150 return Ok ( ExpnId :: root ( ) ) ;
11531151 }
11541152
1155- let outer_expns = & context. remapped_expns ;
1156-
1157- // Ensure that the lock() temporary is dropped early
1158- {
1159- if let Some ( expn_id) = outer_expns. lock ( ) . get ( index as usize ) . copied ( ) . flatten ( ) {
1160- return Ok ( expn_id) ;
1161- }
1162- }
1153+ // This function is used to decode metadata, so it cannot decode information about LOCAL_CRATE.
1154+ debug_assert_ne ! ( krate, LOCAL_CRATE ) ;
11631155
11641156 // Don't decode the data inside `HygieneData::with`, since we need to recursively decode
11651157 // other ExpnIds
1166- let ( mut expn_data, hash) = decode_data ( d, index) ?;
1158+ let ( expn_data, hash) = decode_data ( krate, index) ;
1159+ debug_assert_eq ! ( krate, expn_data. krate) ;
1160+ debug_assert_eq ! ( expn_data. orig_id, Some ( index) ) ;
11671161
11681162 let expn_id = HygieneData :: with ( |hygiene_data| {
11691163 if let Some ( & expn_id) = hygiene_data. expn_hash_to_expn_id . get ( & hash) {
11701164 return expn_id;
11711165 }
11721166
11731167 let expn_id = ExpnId ( hygiene_data. expn_data . len ( ) as u32 ) ;
1174-
1175- // If we just deserialized an `ExpnData` owned by
1176- // the local crate, its `orig_id` will be stale,
1177- // so we need to update it to its own value.
1178- // This only happens when we deserialize the incremental cache,
1179- // since a crate will never decode its own metadata.
1180- if expn_data. krate == LOCAL_CRATE {
1181- expn_data. orig_id = Some ( expn_id. 0 ) ;
1182- }
1183-
11841168 hygiene_data. expn_data . push ( Some ( expn_data) ) ;
11851169 hygiene_data. expn_hashes . push ( hash) ;
11861170 let _old_id = hygiene_data. expn_hash_to_expn_id . insert ( hash, expn_id) ;
11871171 debug_assert ! ( _old_id. is_none( ) ) ;
11881172
1189- let mut expns = outer_expns. lock ( ) ;
1190- let new_len = index as usize + 1 ;
1191- if expns. len ( ) < new_len {
1192- expns. resize ( new_len, None ) ;
1193- }
1194- expns[ index as usize ] = Some ( expn_id) ;
1195- drop ( expns) ;
11961173 expn_id
11971174 } ) ;
1175+
11981176 Ok ( expn_id)
11991177}
12001178
0 commit comments