@@ -202,6 +202,40 @@ impl<'tcx> TyCtxt<'tcx> {
202202 }
203203}
204204
205+ #[ inline]
206+ fn query_get_at < ' tcx , Cache > (
207+ tcx : TyCtxt < ' tcx > ,
208+ execute_query : fn ( TyCtxt < ' tcx > , Span , Cache :: Key , QueryMode ) -> Option < Cache :: Value > ,
209+ query_cache : & Cache ,
210+ span : Span ,
211+ key : Cache :: Key ,
212+ ) -> Cache :: Value
213+ where
214+ Cache : QueryCache ,
215+ {
216+ let key = key. into_query_param ( ) ;
217+ match try_get_cached ( tcx, query_cache, & key) {
218+ Some ( value) => value,
219+ None => execute_query ( tcx, span, key, QueryMode :: Get ) . unwrap ( ) ,
220+ }
221+ }
222+
223+ #[ inline]
224+ fn query_ensure < ' tcx , Cache > (
225+ tcx : TyCtxt < ' tcx > ,
226+ execute_query : fn ( TyCtxt < ' tcx > , Span , Cache :: Key , QueryMode ) -> Option < Cache :: Value > ,
227+ query_cache : & Cache ,
228+ key : Cache :: Key ,
229+ check_cache : bool ,
230+ ) where
231+ Cache : QueryCache ,
232+ {
233+ let key = key. into_query_param ( ) ;
234+ if try_get_cached ( tcx, query_cache, & key) . is_none ( ) {
235+ execute_query ( tcx, DUMMY_SP , key, QueryMode :: Ensure { check_cache } ) ;
236+ }
237+ }
238+
205239macro_rules! query_helper_param_ty {
206240 ( DefId ) => { impl IntoQueryParam <DefId > } ;
207241 ( LocalDefId ) => { impl IntoQueryParam <LocalDefId > } ;
@@ -407,35 +441,27 @@ macro_rules! define_callbacks {
407441 $( $( #[ $attr] ) *
408442 #[ inline( always) ]
409443 pub fn $name( self , key: query_helper_param_ty!( $( $K) * ) ) {
410- let key = key. into_query_param( ) ;
411-
412- match try_get_cached( self . tcx, & self . tcx. query_system. caches. $name, & key) {
413- Some ( _) => return ,
414- None => ( self . tcx. query_system. fns. engine. $name) (
415- self . tcx,
416- DUMMY_SP ,
417- key,
418- QueryMode :: Ensure { check_cache: false } ,
419- ) ,
420- } ;
444+ query_ensure(
445+ self . tcx,
446+ self . tcx. query_system. fns. engine. $name,
447+ & self . tcx. query_system. caches. $name,
448+ key. into_query_param( ) ,
449+ false ,
450+ ) ;
421451 } ) *
422452 }
423453
424454 impl <' tcx> TyCtxtEnsureWithValue <' tcx> {
425455 $( $( #[ $attr] ) *
426456 #[ inline( always) ]
427457 pub fn $name( self , key: query_helper_param_ty!( $( $K) * ) ) {
428- let key = key. into_query_param( ) ;
429-
430- match try_get_cached( self . tcx, & self . tcx. query_system. caches. $name, & key) {
431- Some ( _) => return ,
432- None => ( self . tcx. query_system. fns. engine. $name) (
433- self . tcx,
434- DUMMY_SP ,
435- key,
436- QueryMode :: Ensure { check_cache: true } ,
437- ) ,
438- } ;
458+ query_ensure(
459+ self . tcx,
460+ self . tcx. query_system. fns. engine. $name,
461+ & self . tcx. query_system. caches. $name,
462+ key. into_query_param( ) ,
463+ true ,
464+ ) ;
439465 } ) *
440466 }
441467
@@ -454,16 +480,13 @@ macro_rules! define_callbacks {
454480 #[ inline( always) ]
455481 pub fn $name( self , key: query_helper_param_ty!( $( $K) * ) ) -> $V
456482 {
457- let key = key. into_query_param( ) ;
458-
459- restore:: <$V>( match try_get_cached( self . tcx, & self . tcx. query_system. caches. $name, & key) {
460- Some ( value) => value,
461- None => ( self . tcx. query_system. fns. engine. $name) (
462- self . tcx,
463- self . span,
464- key, QueryMode :: Get
465- ) . unwrap( ) ,
466- } )
483+ restore:: <$V>( query_get_at(
484+ self . tcx,
485+ self . tcx. query_system. fns. engine. $name,
486+ & self . tcx. query_system. caches. $name,
487+ self . span,
488+ key. into_query_param( ) ,
489+ ) )
467490 } ) *
468491 }
469492
0 commit comments