@@ -627,6 +627,7 @@ impl<'a, 'b: 'a, 'tcx: 'b> IsolatedEncoder<'a, 'b, 'tcx> {
627
627
} ,
628
628
generics : Some ( self . encode_generics ( def_id) ) ,
629
629
predicates : Some ( self . encode_predicates ( def_id) ) ,
630
+ predicates_defined_on : None ,
630
631
631
632
mir : self . encode_optimized_mir ( def_id) ,
632
633
}
@@ -664,6 +665,7 @@ impl<'a, 'b: 'a, 'tcx: 'b> IsolatedEncoder<'a, 'b, 'tcx> {
664
665
variances : LazySeq :: empty ( ) ,
665
666
generics : None ,
666
667
predicates : None ,
668
+ predicates_defined_on : None ,
667
669
668
670
mir : None
669
671
}
@@ -704,6 +706,7 @@ impl<'a, 'b: 'a, 'tcx: 'b> IsolatedEncoder<'a, 'b, 'tcx> {
704
706
variances : LazySeq :: empty ( ) ,
705
707
generics : Some ( self . encode_generics ( def_id) ) ,
706
708
predicates : Some ( self . encode_predicates ( def_id) ) ,
709
+ predicates_defined_on : None ,
707
710
708
711
mir : None ,
709
712
}
@@ -761,6 +764,7 @@ impl<'a, 'b: 'a, 'tcx: 'b> IsolatedEncoder<'a, 'b, 'tcx> {
761
764
} ,
762
765
generics : Some ( self . encode_generics ( def_id) ) ,
763
766
predicates : Some ( self . encode_predicates ( def_id) ) ,
767
+ predicates_defined_on : None ,
764
768
765
769
mir : self . encode_optimized_mir ( def_id) ,
766
770
}
@@ -778,6 +782,12 @@ impl<'a, 'b: 'a, 'tcx: 'b> IsolatedEncoder<'a, 'b, 'tcx> {
778
782
self . lazy ( & tcx. predicates_of ( def_id) )
779
783
}
780
784
785
+ fn encode_predicates_defined_on ( & mut self , def_id : DefId ) -> Lazy < ty:: GenericPredicates < ' tcx > > {
786
+ debug ! ( "IsolatedEncoder::encode_predicates_defined_on({:?})" , def_id) ;
787
+ let tcx = self . tcx ;
788
+ self . lazy ( & tcx. predicates_defined_on ( def_id) )
789
+ }
790
+
781
791
fn encode_info_for_trait_item ( & mut self , def_id : DefId ) -> Entry < ' tcx > {
782
792
debug ! ( "IsolatedEncoder::encode_info_for_trait_item({:?})" , def_id) ;
783
793
let tcx = self . tcx ;
@@ -867,6 +877,7 @@ impl<'a, 'b: 'a, 'tcx: 'b> IsolatedEncoder<'a, 'b, 'tcx> {
867
877
} ,
868
878
generics : Some ( self . encode_generics ( def_id) ) ,
869
879
predicates : Some ( self . encode_predicates ( def_id) ) ,
880
+ predicates_defined_on : None ,
870
881
871
882
mir : self . encode_optimized_mir ( def_id) ,
872
883
}
@@ -963,6 +974,7 @@ impl<'a, 'b: 'a, 'tcx: 'b> IsolatedEncoder<'a, 'b, 'tcx> {
963
974
} ,
964
975
generics : Some ( self . encode_generics ( def_id) ) ,
965
976
predicates : Some ( self . encode_predicates ( def_id) ) ,
977
+ predicates_defined_on : None ,
966
978
967
979
mir : if mir { self . encode_optimized_mir ( def_id) } else { None } ,
968
980
}
@@ -1226,6 +1238,16 @@ impl<'a, 'b: 'a, 'tcx: 'b> IsolatedEncoder<'a, 'b, 'tcx> {
1226
1238
_ => None ,
1227
1239
} ,
1228
1240
1241
+ // The only time that `predicates_defined_on` is used (on
1242
+ // an external item) is for traits, during chalk lowering,
1243
+ // so only encode it in that case as an efficiency
1244
+ // hack. (No reason not to expand it in the future if
1245
+ // necessary.)
1246
+ predicates_defined_on : match item. node {
1247
+ hir:: ItemTrait ( ..) => Some ( self . encode_predicates_defined_on ( def_id) ) ,
1248
+ _ => None , // not *wrong* for other kinds of items, but not needed
1249
+ } ,
1250
+
1229
1251
mir : match item. node {
1230
1252
hir:: ItemStatic ( ..) => {
1231
1253
self . encode_optimized_mir ( def_id)
@@ -1276,6 +1298,7 @@ impl<'a, 'b: 'a, 'tcx: 'b> IsolatedEncoder<'a, 'b, 'tcx> {
1276
1298
variances : LazySeq :: empty ( ) ,
1277
1299
generics : None ,
1278
1300
predicates : None ,
1301
+ predicates_defined_on : None ,
1279
1302
mir : None ,
1280
1303
}
1281
1304
}
@@ -1303,6 +1326,7 @@ impl<'a, 'b: 'a, 'tcx: 'b> IsolatedEncoder<'a, 'b, 'tcx> {
1303
1326
variances : LazySeq :: empty ( ) ,
1304
1327
generics : None ,
1305
1328
predicates : None ,
1329
+ predicates_defined_on : None ,
1306
1330
1307
1331
mir : None ,
1308
1332
}
@@ -1347,6 +1371,7 @@ impl<'a, 'b: 'a, 'tcx: 'b> IsolatedEncoder<'a, 'b, 'tcx> {
1347
1371
variances : LazySeq :: empty ( ) ,
1348
1372
generics : Some ( self . encode_generics ( def_id) ) ,
1349
1373
predicates : None ,
1374
+ predicates_defined_on : None ,
1350
1375
1351
1376
mir : self . encode_optimized_mir ( def_id) ,
1352
1377
}
@@ -1374,6 +1399,7 @@ impl<'a, 'b: 'a, 'tcx: 'b> IsolatedEncoder<'a, 'b, 'tcx> {
1374
1399
variances : LazySeq :: empty ( ) ,
1375
1400
generics : Some ( self . encode_generics ( def_id) ) ,
1376
1401
predicates : Some ( self . encode_predicates ( def_id) ) ,
1402
+ predicates_defined_on : None ,
1377
1403
1378
1404
mir : self . encode_optimized_mir ( def_id) ,
1379
1405
}
@@ -1575,6 +1601,7 @@ impl<'a, 'b: 'a, 'tcx: 'b> IsolatedEncoder<'a, 'b, 'tcx> {
1575
1601
} ,
1576
1602
generics : Some ( self . encode_generics ( def_id) ) ,
1577
1603
predicates : Some ( self . encode_predicates ( def_id) ) ,
1604
+ predicates_defined_on : None ,
1578
1605
1579
1606
mir : None ,
1580
1607
}
0 commit comments