@@ -331,7 +331,7 @@ macro_rules! define_queries {
331
331
}
332
332
} ) *
333
333
334
- #[ allow( non_upper_case_globals ) ]
334
+ #[ allow( nonstandard_style ) ]
335
335
pub mod query_callbacks {
336
336
use super :: * ;
337
337
use rustc_middle:: dep_graph:: DepNode ;
@@ -341,74 +341,83 @@ macro_rules! define_queries {
341
341
use rustc_query_system:: dep_graph:: FingerprintStyle ;
342
342
343
343
// We use this for most things when incr. comp. is turned off.
344
- pub const Null : DepKindStruct = DepKindStruct {
345
- is_anon: false ,
346
- is_eval_always: false ,
347
-
348
- fingerprint_style: || FingerprintStyle :: Unit ,
349
- force_from_dep_node: |_, dep_node| bug!( "force_from_dep_node: encountered {:?}" , dep_node) ,
350
- try_load_from_on_disk_cache: |_, _| { } ,
351
- } ;
352
-
353
- pub const TraitSelect : DepKindStruct = DepKindStruct {
354
- is_anon: true ,
355
- is_eval_always: false ,
344
+ pub fn Null ( ) -> DepKindStruct {
345
+ DepKindStruct {
346
+ is_anon: false ,
347
+ is_eval_always: false ,
348
+ fingerprint_style: FingerprintStyle :: Unit ,
349
+ force_from_dep_node: Some ( |_, dep_node| bug!( "force_from_dep_node: encountered {:?}" , dep_node) ) ,
350
+ try_load_from_on_disk_cache: None ,
351
+ }
352
+ }
356
353
357
- fingerprint_style: || FingerprintStyle :: Unit ,
358
- force_from_dep_node: |_, _| false ,
359
- try_load_from_on_disk_cache: |_, _| { } ,
360
- } ;
354
+ pub fn TraitSelect ( ) -> DepKindStruct {
355
+ DepKindStruct {
356
+ is_anon: true ,
357
+ is_eval_always: false ,
358
+ fingerprint_style: FingerprintStyle :: Unit ,
359
+ force_from_dep_node: None ,
360
+ try_load_from_on_disk_cache: None ,
361
+ }
362
+ }
361
363
362
- pub const CompileCodegenUnit : DepKindStruct = DepKindStruct {
363
- is_anon: false ,
364
- is_eval_always: false ,
364
+ pub fn CompileCodegenUnit ( ) -> DepKindStruct {
365
+ DepKindStruct {
366
+ is_anon: false ,
367
+ is_eval_always: false ,
368
+ fingerprint_style: FingerprintStyle :: Opaque ,
369
+ force_from_dep_node: None ,
370
+ try_load_from_on_disk_cache: None ,
371
+ }
372
+ }
365
373
366
- fingerprint_style: || FingerprintStyle :: Opaque ,
367
- force_from_dep_node: |_, _| false ,
368
- try_load_from_on_disk_cache: |_, _| { } ,
369
- } ;
374
+ pub fn CompileMonoItem ( ) -> DepKindStruct {
375
+ DepKindStruct {
376
+ is_anon: false ,
377
+ is_eval_always: false ,
378
+ fingerprint_style: FingerprintStyle :: Opaque ,
379
+ force_from_dep_node: None ,
380
+ try_load_from_on_disk_cache: None ,
381
+ }
382
+ }
370
383
371
- pub const CompileMonoItem : DepKindStruct = DepKindStruct {
372
- is_anon: false ,
373
- is_eval_always: false ,
384
+ $ ( pub fn $name ( ) -> DepKindStruct {
385
+ let is_anon = is_anon! ( [ $ ( $modifiers ) * ] ) ;
386
+ let is_eval_always = is_eval_always! ( [ $ ( $modifiers ) * ] ) ;
374
387
375
- fingerprint_style: || FingerprintStyle :: Opaque ,
376
- force_from_dep_node: |_, _| false ,
377
- try_load_from_on_disk_cache: |_, _| { } ,
378
- } ;
388
+ let fingerprint_style =
389
+ <query_keys:: $name<' _> as DepNodeParams <TyCtxt <' _>>>:: fingerprint_style( ) ;
379
390
380
- $( pub const $name: DepKindStruct = {
381
- const is_anon: bool = is_anon!( [ $( $modifiers) * ] ) ;
382
- const is_eval_always: bool = is_eval_always!( [ $( $modifiers) * ] ) ;
391
+ if is_anon || !fingerprint_style. reconstructible( ) {
392
+ return DepKindStruct {
393
+ is_anon,
394
+ is_eval_always,
395
+ fingerprint_style,
396
+ force_from_dep_node: None ,
397
+ try_load_from_on_disk_cache: None ,
398
+ }
399
+ }
383
400
384
401
#[ inline( always) ]
385
- fn fingerprint_style( ) -> FingerprintStyle {
386
- <query_keys:: $name<' _> as DepNodeParams <TyCtxt <' _>>>
387
- :: fingerprint_style( )
402
+ fn recover<' tcx>( tcx: TyCtxt <' tcx>, dep_node: DepNode ) -> Option <query_keys:: $name<' tcx>> {
403
+ <query_keys:: $name<' _> as DepNodeParams <TyCtxt <' _>>>:: recover( tcx, & dep_node)
388
404
}
389
405
390
- fn recover<' tcx>( tcx: TyCtxt <' tcx>, dep_node: & DepNode ) -> Option <query_keys:: $name<' tcx>> {
391
- <query_keys:: $name<' _> as DepNodeParams <TyCtxt <' _>>>:: recover( tcx, dep_node)
406
+ fn force_from_dep_node( tcx: TyCtxt <' _>, dep_node: DepNode ) -> bool {
407
+ if let Some ( key) = recover( tcx, dep_node) {
408
+ let tcx = QueryCtxt :: from_tcx( tcx) ;
409
+ force_query:: <queries:: $name<' _>, _>( tcx, key, dep_node) ;
410
+ true
411
+ } else {
412
+ false
413
+ }
392
414
}
393
415
394
- fn force_from_dep_node( tcx: TyCtxt <' _>, dep_node: & DepNode ) -> bool {
395
- let tcx = QueryCtxt :: from_tcx( tcx) ;
396
- force_query:: <queries:: $name<' _>, _>( tcx, dep_node)
397
- }
416
+ fn try_load_from_on_disk_cache( tcx: TyCtxt <' _>, dep_node: DepNode ) {
417
+ debug_assert!( tcx. dep_graph. is_green( & dep_node) ) ;
398
418
399
- fn try_load_from_on_disk_cache ( tcx: TyCtxt < ' _> , dep_node: & DepNode ) {
419
+ let key = recover ( tcx, dep_node) . unwrap_or_else ( || panic! ( "Failed to recover key for {:?} with hash {}" , dep_node , dep_node . hash ) ) ;
400
420
let tcx = QueryCtxt :: from_tcx( tcx) ;
401
- if is_anon {
402
- return
403
- }
404
-
405
- if !fingerprint_style( ) . reconstructible( ) {
406
- return
407
- }
408
-
409
- debug_assert!( tcx. dep_graph. is_green( dep_node) ) ;
410
-
411
- let key = recover( * tcx, dep_node) . unwrap_or_else( || panic!( "Failed to recover key for {:?} with hash {}" , dep_node, dep_node. hash) ) ;
412
421
if queries:: $name:: cache_on_disk( tcx, & key, None ) {
413
422
let _ = tcx. $name( key) ;
414
423
}
@@ -418,13 +427,15 @@ macro_rules! define_queries {
418
427
is_anon,
419
428
is_eval_always,
420
429
fingerprint_style,
421
- force_from_dep_node,
422
- try_load_from_on_disk_cache,
430
+ force_from_dep_node: Some ( force_from_dep_node ) ,
431
+ try_load_from_on_disk_cache: Some ( try_load_from_on_disk_cache ) ,
423
432
}
424
- } ; ) *
433
+ } ) *
425
434
}
426
435
427
- pub static QUERY_CALLBACKS : & [ DepKindStruct ] = & make_dep_kind_array!( query_callbacks) ;
436
+ pub fn query_callbacks<' tcx>( arena: & ' tcx Arena <' tcx>) -> & ' tcx [ DepKindStruct ] {
437
+ arena. alloc_from_iter( make_dep_kind_array!( query_callbacks) )
438
+ }
428
439
}
429
440
}
430
441
0 commit comments