@@ -191,101 +191,10 @@ macro_rules! define_dep_nodes {
191
191
) *
192
192
}
193
193
194
- pub type DepNode = rustc_query_system:: dep_graph:: DepNode <DepKind >;
195
-
196
- // We keep a lot of `DepNode`s in memory during compilation. It's not
197
- // required that their size stay the same, but we don't want to change
198
- // it inadvertently. This assert just ensures we're aware of any change.
199
- #[ cfg( any( target_arch = "x86" , target_arch = "x86_64" ) ) ]
200
- static_assert_size!( DepNode , 17 ) ;
201
-
202
- #[ cfg( not( any( target_arch = "x86" , target_arch = "x86_64" ) ) ) ]
203
- static_assert_size!( DepNode , 24 ) ;
204
-
205
- pub trait DepNodeExt : Sized {
206
- /// Construct a DepNode from the given DepKind and DefPathHash. This
207
- /// method will assert that the given DepKind actually requires a
208
- /// single DefId/DefPathHash parameter.
209
- fn from_def_path_hash( def_path_hash: DefPathHash , kind: DepKind ) -> Self ;
210
-
211
- /// Extracts the DefId corresponding to this DepNode. This will work
212
- /// if two conditions are met:
213
- ///
214
- /// 1. The Fingerprint of the DepNode actually is a DefPathHash, and
215
- /// 2. the item that the DefPath refers to exists in the current tcx.
216
- ///
217
- /// Condition (1) is determined by the DepKind variant of the
218
- /// DepNode. Condition (2) might not be fulfilled if a DepNode
219
- /// refers to something from the previous compilation session that
220
- /// has been removed.
221
- fn extract_def_id( & self , tcx: TyCtxt <' _>) -> Option <DefId >;
222
-
223
- /// Used in testing
224
- fn from_label_string( label: & str , def_path_hash: DefPathHash )
225
- -> Result <Self , ( ) >;
226
-
227
- /// Used in testing
228
- fn has_label_string( label: & str ) -> bool ;
229
- }
230
-
231
- impl DepNodeExt for DepNode {
232
- /// Construct a DepNode from the given DepKind and DefPathHash. This
233
- /// method will assert that the given DepKind actually requires a
234
- /// single DefId/DefPathHash parameter.
235
- fn from_def_path_hash( def_path_hash: DefPathHash , kind: DepKind ) -> DepNode {
236
- debug_assert!( kind. can_reconstruct_query_key( ) && kind. has_params( ) ) ;
237
- DepNode {
238
- kind,
239
- hash: def_path_hash. 0 . into( ) ,
240
- }
241
- }
242
-
243
- /// Extracts the DefId corresponding to this DepNode. This will work
244
- /// if two conditions are met:
245
- ///
246
- /// 1. The Fingerprint of the DepNode actually is a DefPathHash, and
247
- /// 2. the item that the DefPath refers to exists in the current tcx.
248
- ///
249
- /// Condition (1) is determined by the DepKind variant of the
250
- /// DepNode. Condition (2) might not be fulfilled if a DepNode
251
- /// refers to something from the previous compilation session that
252
- /// has been removed.
253
- fn extract_def_id( & self , tcx: TyCtxt <' tcx>) -> Option <DefId > {
254
- if self . kind. can_reconstruct_query_key( ) {
255
- tcx. queries. on_disk_cache. as_ref( ) ?. def_path_hash_to_def_id( tcx, DefPathHash ( self . hash. into( ) ) )
256
- } else {
257
- None
258
- }
259
- }
260
-
261
- /// Used in testing
262
- fn from_label_string( label: & str , def_path_hash: DefPathHash ) -> Result <DepNode , ( ) > {
263
- let kind = match label {
264
- $(
265
- stringify!( $variant) => DepKind :: $variant,
266
- ) *
267
- _ => return Err ( ( ) ) ,
268
- } ;
269
-
270
- if !kind. can_reconstruct_query_key( ) {
271
- return Err ( ( ) ) ;
272
- }
273
-
274
- if kind. has_params( ) {
275
- Ok ( DepNode :: from_def_path_hash( def_path_hash, kind) )
276
- } else {
277
- Ok ( DepNode :: new_no_params( kind) )
278
- }
279
- }
280
-
281
- /// Used in testing
282
- fn has_label_string( label: & str ) -> bool {
283
- match label {
284
- $(
285
- stringify!( $variant) => true ,
286
- ) *
287
- _ => false ,
288
- }
194
+ fn dep_kind_from_label_string( label: & str ) -> Result <DepKind , ( ) > {
195
+ match label {
196
+ $( stringify!( $variant) => Ok ( DepKind :: $variant) , ) *
197
+ _ => Err ( ( ) ) ,
289
198
}
290
199
}
291
200
@@ -312,6 +221,93 @@ rustc_dep_node_append!([define_dep_nodes!][ <'tcx>
312
221
[ ] CompileCodegenUnit ( Symbol ) ,
313
222
] ) ;
314
223
224
+ pub type DepNode = rustc_query_system:: dep_graph:: DepNode < DepKind > ;
225
+
226
+ // We keep a lot of `DepNode`s in memory during compilation. It's not
227
+ // required that their size stay the same, but we don't want to change
228
+ // it inadvertently. This assert just ensures we're aware of any change.
229
+ #[ cfg( any( target_arch = "x86" , target_arch = "x86_64" ) ) ]
230
+ static_assert_size ! ( DepNode , 17 ) ;
231
+
232
+ #[ cfg( not( any( target_arch = "x86" , target_arch = "x86_64" ) ) ) ]
233
+ static_assert_size ! ( DepNode , 24 ) ;
234
+
235
+ pub trait DepNodeExt : Sized {
236
+ /// Construct a DepNode from the given DepKind and DefPathHash. This
237
+ /// method will assert that the given DepKind actually requires a
238
+ /// single DefId/DefPathHash parameter.
239
+ fn from_def_path_hash ( def_path_hash : DefPathHash , kind : DepKind ) -> Self ;
240
+
241
+ /// Extracts the DefId corresponding to this DepNode. This will work
242
+ /// if two conditions are met:
243
+ ///
244
+ /// 1. The Fingerprint of the DepNode actually is a DefPathHash, and
245
+ /// 2. the item that the DefPath refers to exists in the current tcx.
246
+ ///
247
+ /// Condition (1) is determined by the DepKind variant of the
248
+ /// DepNode. Condition (2) might not be fulfilled if a DepNode
249
+ /// refers to something from the previous compilation session that
250
+ /// has been removed.
251
+ fn extract_def_id ( & self , tcx : TyCtxt < ' _ > ) -> Option < DefId > ;
252
+
253
+ /// Used in testing
254
+ fn from_label_string ( label : & str , def_path_hash : DefPathHash ) -> Result < Self , ( ) > ;
255
+
256
+ /// Used in testing
257
+ fn has_label_string ( label : & str ) -> bool ;
258
+ }
259
+
260
+ impl DepNodeExt for DepNode {
261
+ /// Construct a DepNode from the given DepKind and DefPathHash. This
262
+ /// method will assert that the given DepKind actually requires a
263
+ /// single DefId/DefPathHash parameter.
264
+ fn from_def_path_hash ( def_path_hash : DefPathHash , kind : DepKind ) -> DepNode {
265
+ debug_assert ! ( kind. can_reconstruct_query_key( ) && kind. has_params( ) ) ;
266
+ DepNode { kind, hash : def_path_hash. 0 . into ( ) }
267
+ }
268
+
269
+ /// Extracts the DefId corresponding to this DepNode. This will work
270
+ /// if two conditions are met:
271
+ ///
272
+ /// 1. The Fingerprint of the DepNode actually is a DefPathHash, and
273
+ /// 2. the item that the DefPath refers to exists in the current tcx.
274
+ ///
275
+ /// Condition (1) is determined by the DepKind variant of the
276
+ /// DepNode. Condition (2) might not be fulfilled if a DepNode
277
+ /// refers to something from the previous compilation session that
278
+ /// has been removed.
279
+ fn extract_def_id ( & self , tcx : TyCtxt < ' tcx > ) -> Option < DefId > {
280
+ if self . kind . can_reconstruct_query_key ( ) {
281
+ tcx. queries
282
+ . on_disk_cache
283
+ . as_ref ( ) ?
284
+ . def_path_hash_to_def_id ( tcx, DefPathHash ( self . hash . into ( ) ) )
285
+ } else {
286
+ None
287
+ }
288
+ }
289
+
290
+ /// Used in testing
291
+ fn from_label_string ( label : & str , def_path_hash : DefPathHash ) -> Result < DepNode , ( ) > {
292
+ let kind = dep_kind_from_label_string ( label) ?;
293
+
294
+ if !kind. can_reconstruct_query_key ( ) {
295
+ return Err ( ( ) ) ;
296
+ }
297
+
298
+ if kind. has_params ( ) {
299
+ Ok ( DepNode :: from_def_path_hash ( def_path_hash, kind) )
300
+ } else {
301
+ Ok ( DepNode :: new_no_params ( kind) )
302
+ }
303
+ }
304
+
305
+ /// Used in testing
306
+ fn has_label_string ( label : & str ) -> bool {
307
+ dep_kind_from_label_string ( label) . is_ok ( )
308
+ }
309
+ }
310
+
315
311
impl < ' tcx > DepNodeParams < TyCtxt < ' tcx > > for DefId {
316
312
#[ inline]
317
313
fn can_reconstruct_query_key ( ) -> bool {
0 commit comments