@@ -411,18 +411,22 @@ where
411
411
C :: Key : Clone + DepNodeParams < CTX :: DepContext > ,
412
412
CTX : QueryContext ,
413
413
{
414
- let job = match JobOwner :: < ' _ , CTX :: DepKind , C :: Key > :: try_start (
414
+ match JobOwner :: < ' _ , CTX :: DepKind , C :: Key > :: try_start (
415
415
& tcx,
416
416
state,
417
417
span,
418
418
key. clone ( ) ,
419
419
lookup,
420
420
query. dep_kind ,
421
421
) {
422
- TryGetJob :: NotYetStarted ( job) => job,
422
+ TryGetJob :: NotYetStarted ( job) => {
423
+ let ( result, dep_node_index) = execute_job ( tcx, key, dep_node, query, job. id , compute) ;
424
+ let result = job. complete ( cache, result, dep_node_index) ;
425
+ ( result, Some ( dep_node_index) )
426
+ }
423
427
TryGetJob :: Cycle ( error) => {
424
428
let result = mk_cycle ( tcx, error, query. handle_cycle_error , & cache. cache ) ;
425
- return ( result, None ) ;
429
+ ( result, None )
426
430
}
427
431
#[ cfg( parallel_compiler) ]
428
432
TryGetJob :: JobCompleted ( query_blocked_prof_timer) => {
@@ -440,27 +444,40 @@ where
440
444
}
441
445
query_blocked_prof_timer. finish_with_query_invocation_id ( index. into ( ) ) ;
442
446
443
- return ( v, Some ( index) ) ;
447
+ ( v, Some ( index) )
444
448
}
445
- } ;
449
+ }
450
+ }
446
451
452
+ fn execute_job < CTX , K , V > (
453
+ tcx : CTX ,
454
+ key : K ,
455
+ dep_node : Option < DepNode < CTX :: DepKind > > ,
456
+ query : & QueryVtable < CTX , K , V > ,
457
+ job_id : QueryJobId < CTX :: DepKind > ,
458
+ compute : fn ( CTX :: DepContext , K ) -> V ,
459
+ ) -> ( V , DepNodeIndex )
460
+ where
461
+ K : Clone + DepNodeParams < CTX :: DepContext > ,
462
+ V : Debug ,
463
+ CTX : QueryContext ,
464
+ {
447
465
let dep_graph = tcx. dep_context ( ) . dep_graph ( ) ;
448
466
449
467
// Fast path for when incr. comp. is off.
450
468
if !dep_graph. is_fully_enabled ( ) {
451
469
let prof_timer = tcx. dep_context ( ) . profiler ( ) . query_provider ( ) ;
452
- let result = tcx. start_query ( job . id , None , || compute ( * tcx. dep_context ( ) , key) ) ;
470
+ let result = tcx. start_query ( job_id , None , || compute ( * tcx. dep_context ( ) , key) ) ;
453
471
let dep_node_index = dep_graph. next_virtual_depnode_index ( ) ;
454
472
prof_timer. finish_with_query_invocation_id ( dep_node_index. into ( ) ) ;
455
- let result = job. complete ( cache, result, dep_node_index) ;
456
- return ( result, None ) ;
473
+ return ( result, dep_node_index) ;
457
474
}
458
475
459
- let ( result , dep_node_index ) = if query. anon {
476
+ if query. anon {
460
477
let prof_timer = tcx. dep_context ( ) . profiler ( ) . query_provider ( ) ;
461
478
462
479
let ( ( result, dep_node_index) , diagnostics) = with_diagnostics ( |diagnostics| {
463
- tcx. start_query ( job . id , diagnostics, || {
480
+ tcx. start_query ( job_id , diagnostics, || {
464
481
dep_graph. with_anon_task ( * tcx. dep_context ( ) , query. dep_kind , || {
465
482
compute ( * tcx. dep_context ( ) , key)
466
483
} )
@@ -479,24 +496,22 @@ where
479
496
} else if query. eval_always {
480
497
// `to_dep_node` is expensive for some `DepKind`s.
481
498
let dep_node = dep_node. unwrap_or_else ( || query. to_dep_node ( * tcx. dep_context ( ) , & key) ) ;
482
- force_query_with_job ( tcx, key, job . id , dep_node, query, compute)
499
+ force_query_with_job ( tcx, key, job_id , dep_node, query, compute)
483
500
} else {
484
501
// `to_dep_node` is expensive for some `DepKind`s.
485
502
let dep_node = dep_node. unwrap_or_else ( || query. to_dep_node ( * tcx. dep_context ( ) , & key) ) ;
486
503
// The diagnostics for this query will be
487
504
// promoted to the current session during
488
505
// `try_mark_green()`, so we can ignore them here.
489
- let loaded = tcx. start_query ( job . id , None , || {
506
+ let loaded = tcx. start_query ( job_id , None , || {
490
507
try_load_from_disk_and_cache_in_memory ( tcx, & key, & dep_node, query, compute)
491
508
} ) ;
492
509
if let Some ( ( result, dep_node_index) ) = loaded {
493
510
( result, dep_node_index)
494
511
} else {
495
- force_query_with_job ( tcx, key, job . id , dep_node, query, compute)
512
+ force_query_with_job ( tcx, key, job_id , dep_node, query, compute)
496
513
}
497
- } ;
498
- let result = job. complete ( cache, result, dep_node_index) ;
499
- ( result, Some ( dep_node_index) )
514
+ }
500
515
}
501
516
502
517
fn try_load_from_disk_and_cache_in_memory < CTX , K , V > (
0 commit comments