@@ -34,7 +34,7 @@ impl<'a, 'tcx> AutoTraitFinder<'a, 'tcx> {
34
34
ty : Ty < ' tcx > ,
35
35
trait_def_id : DefId ,
36
36
param_env : ty:: ParamEnv < ' tcx > ,
37
- param_env_def_id : DefId ,
37
+ item_def_id : DefId ,
38
38
f : & auto_trait:: AutoTraitFinder < ' tcx > ,
39
39
// If this is set, show only negative trait implementations, not positive ones.
40
40
discard_positive_impl : bool ,
@@ -50,7 +50,7 @@ impl<'a, 'tcx> AutoTraitFinder<'a, 'tcx> {
50
50
let region_data = info. region_data ;
51
51
52
52
let names_map = tcx
53
- . generics_of ( param_env_def_id )
53
+ . generics_of ( item_def_id )
54
54
. params
55
55
. iter ( )
56
56
. filter_map ( |param| match param. kind {
@@ -62,16 +62,16 @@ impl<'a, 'tcx> AutoTraitFinder<'a, 'tcx> {
62
62
let lifetime_predicates = Self :: handle_lifetimes ( & region_data, & names_map) ;
63
63
let new_generics = self . param_env_to_generics (
64
64
infcx. tcx ,
65
- param_env_def_id ,
65
+ item_def_id ,
66
66
info. full_user_env ,
67
67
lifetime_predicates,
68
68
info. vid_to_region ,
69
69
) ;
70
70
71
71
debug ! (
72
- "find_auto_trait_generics(param_env_def_id ={:?}, trait_def_id={:?}): \
72
+ "find_auto_trait_generics(item_def_id ={:?}, trait_def_id={:?}): \
73
73
finished with {:?}",
74
- param_env_def_id , trait_def_id, new_generics
74
+ item_def_id , trait_def_id, new_generics
75
75
) ;
76
76
77
77
new_generics
@@ -101,7 +101,7 @@ impl<'a, 'tcx> AutoTraitFinder<'a, 'tcx> {
101
101
// Instead, we generate `impl !Send for Foo<T>`, which better
102
102
// expresses the fact that `Foo<T>` never implements `Send`,
103
103
// regardless of the choice of `T`.
104
- let params = ( tcx. generics_of ( param_env_def_id ) , ty:: GenericPredicates :: default ( ) )
104
+ let params = ( tcx. generics_of ( item_def_id ) , ty:: GenericPredicates :: default ( ) )
105
105
. clean ( self . cx )
106
106
. params ;
107
107
@@ -115,7 +115,7 @@ impl<'a, 'tcx> AutoTraitFinder<'a, 'tcx> {
115
115
name : None ,
116
116
attrs : Default :: default ( ) ,
117
117
visibility : Inherited ,
118
- def_id : self . cx . next_def_id ( param_env_def_id . krate ) ,
118
+ def_id : self . cx . next_def_id ( item_def_id . krate ) ,
119
119
kind : box ImplItem ( Impl {
120
120
unsafety : hir:: Unsafety :: Normal ,
121
121
generics : new_generics,
@@ -130,26 +130,25 @@ impl<'a, 'tcx> AutoTraitFinder<'a, 'tcx> {
130
130
} )
131
131
}
132
132
133
- // FIXME(eddyb) figure out a better way to pass information about
134
- // parametrization of `ty` than `param_env_def_id`.
135
- crate fn get_auto_trait_impls ( & mut self , ty : Ty < ' tcx > , param_env_def_id : DefId ) -> Vec < Item > {
133
+ crate fn get_auto_trait_impls ( & mut self , item_def_id : DefId ) -> Vec < Item > {
136
134
let tcx = self . cx . tcx ;
137
- let param_env = tcx. param_env ( param_env_def_id) ;
138
- let f = auto_trait:: AutoTraitFinder :: new ( self . cx . tcx ) ;
135
+ let param_env = tcx. param_env ( item_def_id) ;
136
+ let ty = tcx. type_of ( item_def_id) ;
137
+ let f = auto_trait:: AutoTraitFinder :: new ( tcx) ;
139
138
140
139
debug ! ( "get_auto_trait_impls({:?})" , ty) ;
141
140
let auto_traits: Vec < _ > = self . cx . auto_traits . iter ( ) . cloned ( ) . collect ( ) ;
142
141
let mut auto_traits: Vec < Item > = auto_traits
143
142
. into_iter ( )
144
143
. filter_map ( |trait_def_id| {
145
- self . generate_for_trait ( ty, trait_def_id, param_env, param_env_def_id , & f, false )
144
+ self . generate_for_trait ( ty, trait_def_id, param_env, item_def_id , & f, false )
146
145
} )
147
146
. collect ( ) ;
148
147
// We are only interested in case the type *doesn't* implement the Sized trait.
149
- if !ty. is_sized ( self . cx . tcx . at ( rustc_span:: DUMMY_SP ) , param_env) {
148
+ if !ty. is_sized ( tcx. at ( rustc_span:: DUMMY_SP ) , param_env) {
150
149
// In case `#![no_core]` is used, `sized_trait` returns nothing.
151
- if let Some ( item) = self . cx . tcx . lang_items ( ) . sized_trait ( ) . and_then ( |sized_trait_did| {
152
- self . generate_for_trait ( ty, sized_trait_did, param_env, param_env_def_id , & f, true )
150
+ if let Some ( item) = tcx. lang_items ( ) . sized_trait ( ) . and_then ( |sized_trait_did| {
151
+ self . generate_for_trait ( ty, sized_trait_did, param_env, item_def_id , & f, true )
153
152
} ) {
154
153
auto_traits. push ( item) ;
155
154
}
@@ -445,15 +444,15 @@ impl<'a, 'tcx> AutoTraitFinder<'a, 'tcx> {
445
444
fn param_env_to_generics (
446
445
& mut self ,
447
446
tcx : TyCtxt < ' tcx > ,
448
- param_env_def_id : DefId ,
447
+ item_def_id : DefId ,
449
448
param_env : ty:: ParamEnv < ' tcx > ,
450
449
mut existing_predicates : Vec < WherePredicate > ,
451
450
vid_to_region : FxHashMap < ty:: RegionVid , ty:: Region < ' tcx > > ,
452
451
) -> Generics {
453
452
debug ! (
454
- "param_env_to_generics(param_env_def_id ={:?}, param_env={:?}, \
453
+ "param_env_to_generics(item_def_id ={:?}, param_env={:?}, \
455
454
existing_predicates={:?})",
456
- param_env_def_id , param_env, existing_predicates
455
+ item_def_id , param_env, existing_predicates
457
456
) ;
458
457
459
458
// The `Sized` trait must be handled specially, since we only display it when
@@ -463,7 +462,7 @@ impl<'a, 'tcx> AutoTraitFinder<'a, 'tcx> {
463
462
let mut replacer = RegionReplacer { vid_to_region : & vid_to_region, tcx } ;
464
463
465
464
let orig_bounds: FxHashSet < _ > =
466
- self . cx . tcx . param_env ( param_env_def_id ) . caller_bounds ( ) . iter ( ) . collect ( ) ;
465
+ self . cx . tcx . param_env ( item_def_id ) . caller_bounds ( ) . iter ( ) . collect ( ) ;
467
466
let clean_where_predicates = param_env
468
467
. caller_bounds ( )
469
468
. iter ( )
@@ -477,14 +476,11 @@ impl<'a, 'tcx> AutoTraitFinder<'a, 'tcx> {
477
476
. map ( |p| p. fold_with ( & mut replacer) ) ;
478
477
479
478
let mut generic_params =
480
- ( tcx. generics_of ( param_env_def_id ) , tcx. explicit_predicates_of ( param_env_def_id ) )
479
+ ( tcx. generics_of ( item_def_id ) , tcx. explicit_predicates_of ( item_def_id ) )
481
480
. clean ( self . cx )
482
481
. params ;
483
482
484
- debug ! (
485
- "param_env_to_generics({:?}): generic_params={:?}" ,
486
- param_env_def_id, generic_params
487
- ) ;
483
+ debug ! ( "param_env_to_generics({:?}): generic_params={:?}" , item_def_id, generic_params) ;
488
484
489
485
let mut has_sized = FxHashSet :: default ( ) ;
490
486
let mut ty_to_bounds: FxHashMap < _ , FxHashSet < _ > > = Default :: default ( ) ;
@@ -648,13 +644,10 @@ impl<'a, 'tcx> AutoTraitFinder<'a, 'tcx> {
648
644
. or_default ( )
649
645
. insert ( * trait_. clone ( ) ) ;
650
646
}
651
- _ => panic ! (
652
- "Unexpected trait {:?} for {:?}" ,
653
- trait_, param_env_def_id,
654
- ) ,
647
+ _ => panic ! ( "Unexpected trait {:?} for {:?}" , trait_, item_def_id) ,
655
648
}
656
649
}
657
- _ => panic ! ( "Unexpected LHS {:?} for {:?}" , lhs, param_env_def_id ) ,
650
+ _ => panic ! ( "Unexpected LHS {:?} for {:?}" , lhs, item_def_id ) ,
658
651
}
659
652
}
660
653
} ;
0 commit comments