@@ -32,13 +32,20 @@ trait ProcessQueryValue<'tcx, T> {
3232 fn process_decoded ( self , _tcx : TyCtxt < ' tcx > , _err : impl Fn ( ) -> !) -> T ;
3333}
3434
35- impl < T > ProcessQueryValue < ' _ , Option < T > > for Option < T > {
35+ impl < T > ProcessQueryValue < ' _ , T > for T {
3636 #[ inline( always) ]
37- fn process_decoded ( self , _tcx : TyCtxt < ' _ > , _err : impl Fn ( ) -> !) -> Option < T > {
37+ fn process_decoded ( self , _tcx : TyCtxt < ' _ > , _err : impl Fn ( ) -> !) -> T {
3838 self
3939 }
4040}
4141
42+ impl < ' tcx , T > ProcessQueryValue < ' tcx , ty:: EarlyBinder < ' tcx , T > > for T {
43+ #[ inline( always) ]
44+ fn process_decoded ( self , _tcx : TyCtxt < ' _ > , _err : impl Fn ( ) -> !) -> ty:: EarlyBinder < ' tcx , T > {
45+ ty:: EarlyBinder :: bind ( self )
46+ }
47+ }
48+
4249impl < T > ProcessQueryValue < ' _ , T > for Option < T > {
4350 #[ inline( always) ]
4451 fn process_decoded ( self , _tcx : TyCtxt < ' _ > , err : impl Fn ( ) -> !) -> T {
@@ -103,7 +110,12 @@ macro_rules! provide_one {
103110 provide_one! {
104111 $tcx, $def_id, $other, $cdata, $name => {
105112 let lazy = $cdata. root. tables. $name. get( $cdata, $def_id. index) ;
106- if lazy. is_default( ) { & [ ] } else { $tcx. arena. alloc_from_iter( lazy. decode( ( $cdata, $tcx) ) ) }
113+ let value = if lazy. is_default( ) {
114+ & [ ] as & [ _]
115+ } else {
116+ $tcx. arena. alloc_from_iter( lazy. decode( ( $cdata, $tcx) ) )
117+ } ;
118+ value. process_decoded( $tcx, || panic!( "{:?} does not have a {:?}" , $def_id, stringify!( $name) ) )
107119 }
108120 }
109121 } ;
@@ -212,15 +224,15 @@ impl IntoArgs for (CrateNum, SimplifiedType) {
212224}
213225
214226provide ! { tcx, def_id, other, cdata,
215- explicit_item_bounds => { cdata . get_explicit_item_bounds ( def_id . index , tcx ) }
216- explicit_item_super_predicates => { cdata . get_explicit_item_super_predicates ( def_id . index , tcx ) }
227+ explicit_item_bounds => { table_defaulted_array }
228+ explicit_item_super_predicates => { table_defaulted_array }
217229 explicit_predicates_of => { table }
218230 generics_of => { table }
219231 inferred_outlives_of => { table_defaulted_array }
220232 explicit_super_predicates_of => { table }
221233 explicit_implied_predicates_of => { table }
222234 type_of => { table }
223- type_alias_is_lazy => { cdata . root . tables . type_alias_is_lazy . get ( cdata , def_id . index ) }
235+ type_alias_is_lazy => { table_direct }
224236 variances_of => { table }
225237 fn_sig => { table }
226238 codegen_fn_attrs => { table }
@@ -240,7 +252,7 @@ provide! { tcx, def_id, other, cdata,
240252 lookup_default_body_stability => { table }
241253 lookup_deprecation_entry => { table }
242254 params_in_repr => { table }
243- unused_generic_params => { cdata . root . tables . unused_generic_params . get ( cdata , def_id . index ) }
255+ unused_generic_params => { table_direct }
244256 def_kind => { cdata. def_kind( def_id. index) }
245257 impl_parent => { table }
246258 defaultness => { table_direct }
@@ -286,9 +298,7 @@ provide! { tcx, def_id, other, cdata,
286298 . process_decoded( tcx, || panic!( "{def_id:?} does not have trait_impl_trait_tys" ) ) )
287299 }
288300
289- associated_type_for_effects => {
290- table
291- }
301+ associated_type_for_effects => { table }
292302 associated_types_for_impl_traits_in_associated_fn => { table_defaulted_array }
293303
294304 visibility => { cdata. get_visibility( def_id. index) }
@@ -309,7 +319,7 @@ provide! { tcx, def_id, other, cdata,
309319 item_attrs => { tcx. arena. alloc_from_iter( cdata. get_item_attrs( def_id. index, tcx. sess) ) }
310320 is_mir_available => { cdata. is_item_mir_available( def_id. index) }
311321 is_ctfe_mir_available => { cdata. is_ctfe_mir_available( def_id. index) }
312- cross_crate_inlinable => { cdata . cross_crate_inlinable ( def_id . index ) }
322+ cross_crate_inlinable => { table_direct }
313323
314324 dylib_dependency_formats => { cdata. get_dylib_dependency_formats( tcx) }
315325 is_private_dep => { cdata. private_dep }
0 commit comments