@@ -67,7 +67,7 @@ use rustc_hir::def_id::{CrateNum, DefId, LocalDefId, CRATE_DEF_INDEX};
67
67
use rustc_hir:: definitions:: DefPathHash ;
68
68
use rustc_hir:: HirId ;
69
69
use rustc_query_system:: query:: QueryAccessors ;
70
- use rustc_serialize:: { Decodable , Decoder , Encodable , Encoder } ;
70
+ use rustc_serialize:: { opaque , Decodable , Decoder , Encodable , Encoder } ;
71
71
use rustc_span:: symbol:: Symbol ;
72
72
use std:: hash:: Hash ;
73
73
@@ -84,6 +84,13 @@ pub trait DepKindTrait: std::fmt::Debug + Sync {
84
84
85
85
fn has_params ( & self ) -> bool ;
86
86
87
+ fn encode_query_results < ' a , ' tcx > (
88
+ & self ,
89
+ tcx : TyCtxt < ' tcx > ,
90
+ encoder : & mut query:: on_disk_cache:: CacheEncoder < ' a , ' tcx , opaque:: Encoder > ,
91
+ query_result_index : & mut query:: on_disk_cache:: EncodedQueryResultIndex ,
92
+ ) ;
93
+
87
94
fn force_from_dep_node ( & self , tcx : TyCtxt < ' _ > , dep_node : & DepNode ) -> bool ;
88
95
89
96
fn query_stats ( & self , tcx : TyCtxt < ' _ > ) -> Option < query:: stats:: QueryStats > ;
@@ -124,6 +131,19 @@ macro_rules! contains_eval_always_attr {
124
131
( $( $attr: ident $( ( $( $attr_args: tt) * ) ) * ) ,* ) => ( { $( is_eval_always_attr!( $attr) | ) * false } ) ;
125
132
}
126
133
134
+ macro_rules! encode_query_results {
135
+ ( [ ] [ $variant: ident] [ $( $args: expr) ,* ] ) => { { } } ;
136
+ ( [ cached $( $rest: tt) * ] [ $variant: ident] [ $( $args: expr) ,* ] ) => { {
137
+ let ret = query:: on_disk_cache:: encode_query_results:: <
138
+ query:: queries:: $variant<' _>
139
+ >( $( $args) ,* ) ;
140
+ match ret { Ok ( ( ) ) => ( ) , Err ( _) => ( ) }
141
+ } } ;
142
+ ( [ $other: ident $( ( $( $other_args: tt) * ) ) * $( , $( $modifiers: tt) * ) * ] [ $variant: ident] [ $( $args: expr) ,* ] ) => {
143
+ encode_query_results!( [ $( $( $modifiers) * ) * ] [ $variant] [ $( $args) ,* ] )
144
+ } ;
145
+ }
146
+
127
147
macro_rules! define_dep_kinds {
128
148
( <$tcx: tt>
129
149
$(
@@ -176,6 +196,16 @@ macro_rules! define_dep_kinds {
176
196
false
177
197
}
178
198
199
+ #[ inline]
200
+ fn encode_query_results<' a, ' tcx>(
201
+ & self ,
202
+ _tcx: TyCtxt <' tcx>,
203
+ _encoder: & mut query:: on_disk_cache:: CacheEncoder <' a, ' tcx, opaque:: Encoder >,
204
+ _query_result_index: & mut query:: on_disk_cache:: EncodedQueryResultIndex ,
205
+ ) {
206
+ encode_query_results!( [ $( $attrs) * ] [ $variant] [ _tcx, _encoder, _query_result_index] ) ;
207
+ }
208
+
179
209
#[ inline]
180
210
fn force_from_dep_node( & self , tcx: TyCtxt <' tcx>, dep_node: & DepNode ) -> bool {
181
211
use rustc_query_system:: query:: force_query;
@@ -422,6 +452,15 @@ impl DepKindTrait for dep_kind::Null {
422
452
false
423
453
}
424
454
455
+ #[ inline]
456
+ fn encode_query_results < ' a , ' tcx > (
457
+ & self ,
458
+ _tcx : TyCtxt < ' tcx > ,
459
+ _encoder : & mut query:: on_disk_cache:: CacheEncoder < ' a , ' tcx , opaque:: Encoder > ,
460
+ _query_result_index : & mut query:: on_disk_cache:: EncodedQueryResultIndex ,
461
+ ) {
462
+ }
463
+
425
464
#[ inline]
426
465
fn force_from_dep_node ( & self , _tcx : TyCtxt < ' tcx > , _dep_node : & DepNode ) -> bool {
427
466
// Forcing this makes no sense.
@@ -463,6 +502,15 @@ impl DepKindTrait for dep_kind::CrateMetadata {
463
502
true
464
503
}
465
504
505
+ #[ inline]
506
+ fn encode_query_results < ' a , ' tcx > (
507
+ & self ,
508
+ _tcx : TyCtxt < ' tcx > ,
509
+ _encoder : & mut query:: on_disk_cache:: CacheEncoder < ' a , ' tcx , opaque:: Encoder > ,
510
+ _query_result_index : & mut query:: on_disk_cache:: EncodedQueryResultIndex ,
511
+ ) {
512
+ }
513
+
466
514
#[ inline]
467
515
fn force_from_dep_node ( & self , _tcx : TyCtxt < ' tcx > , _dep_node : & DepNode ) -> bool {
468
516
// These are inputs that are expected to be pre-allocated and that
@@ -509,6 +557,15 @@ impl DepKindTrait for dep_kind::TraitSelect {
509
557
false
510
558
}
511
559
560
+ #[ inline]
561
+ fn encode_query_results < ' a , ' tcx > (
562
+ & self ,
563
+ _tcx : TyCtxt < ' tcx > ,
564
+ _encoder : & mut query:: on_disk_cache:: CacheEncoder < ' a , ' tcx , opaque:: Encoder > ,
565
+ _query_result_index : & mut query:: on_disk_cache:: EncodedQueryResultIndex ,
566
+ ) {
567
+ }
568
+
512
569
#[ inline]
513
570
fn force_from_dep_node ( & self , _tcx : TyCtxt < ' tcx > , _dep_node : & DepNode ) -> bool {
514
571
// These are anonymous nodes.
@@ -555,6 +612,15 @@ impl DepKindTrait for dep_kind::CompileCodegenUnit {
555
612
true
556
613
}
557
614
615
+ #[ inline]
616
+ fn encode_query_results < ' a , ' tcx > (
617
+ & self ,
618
+ _tcx : TyCtxt < ' tcx > ,
619
+ _encoder : & mut query:: on_disk_cache:: CacheEncoder < ' a , ' tcx , opaque:: Encoder > ,
620
+ _query_result_index : & mut query:: on_disk_cache:: EncodedQueryResultIndex ,
621
+ ) {
622
+ }
623
+
558
624
#[ inline]
559
625
fn force_from_dep_node ( & self , _tcx : TyCtxt < ' tcx > , _dep_node : & DepNode ) -> bool {
560
626
// We don't have enough information to reconstruct the query key of these.
0 commit comments