Skip to content

Commit c835607

Browse files
committed
rustdoc: remove def_ctor hack.
1 parent f843ad6 commit c835607

File tree

10 files changed

+146
-518
lines changed

10 files changed

+146
-518
lines changed

src/librustc/traits/auto_trait.rs

+9-12
Original file line numberDiff line numberDiff line change
@@ -77,15 +77,15 @@ impl<'a, 'tcx> AutoTraitFinder<'a, 'tcx> {
7777
/// in the future.
7878
pub fn find_auto_trait_generics<A>(
7979
&self,
80-
did: DefId,
80+
ty: Ty<'tcx>,
81+
param_env_def_id: DefId,
8182
trait_did: DefId,
8283
generics: &ty::Generics,
8384
auto_trait_callback: impl for<'i> Fn(&InferCtxt<'_, 'tcx, 'i>, AutoTraitInfo<'i>) -> A,
8485
) -> AutoTraitResult<A> {
8586
let tcx = self.tcx;
86-
let ty = self.tcx.type_of(did);
8787

88-
let orig_params = tcx.param_env(did);
88+
let orig_params = tcx.param_env(param_env_def_id);
8989

9090
let trait_ref = ty::TraitRef {
9191
def_id: trait_did,
@@ -105,9 +105,9 @@ impl<'a, 'tcx> AutoTraitFinder<'a, 'tcx> {
105105
match result {
106106
Ok(Some(Vtable::VtableImpl(_))) => {
107107
debug!(
108-
"find_auto_trait_generics(did={:?}, trait_did={:?}, generics={:?}): \
108+
"find_auto_trait_generics(ty={:?}, trait_did={:?}, generics={:?}): \
109109
manual impl found, bailing out",
110-
did, trait_did, generics
110+
ty, trait_did, generics
111111
);
112112
true
113113
}
@@ -158,7 +158,6 @@ impl<'a, 'tcx> AutoTraitFinder<'a, 'tcx> {
158158

159159
let (new_env, user_env) = match self.evaluate_predicates(
160160
&mut infcx,
161-
did,
162161
trait_did,
163162
ty,
164163
orig_params.clone(),
@@ -172,7 +171,6 @@ impl<'a, 'tcx> AutoTraitFinder<'a, 'tcx> {
172171

173172
let (full_env, full_user_env) = self.evaluate_predicates(
174173
&mut infcx,
175-
did,
176174
trait_did,
177175
ty,
178176
new_env.clone(),
@@ -187,9 +185,9 @@ impl<'a, 'tcx> AutoTraitFinder<'a, 'tcx> {
187185
});
188186

189187
debug!(
190-
"find_auto_trait_generics(did={:?}, trait_did={:?}, generics={:?}): fulfilling \
188+
"find_auto_trait_generics(ty={:?}, trait_did={:?}, generics={:?}): fulfilling \
191189
with {:?}",
192-
did, trait_did, generics, full_env
190+
ty, trait_did, generics, full_env
193191
);
194192
infcx.clear_caches();
195193

@@ -289,7 +287,6 @@ impl<'a, 'tcx> AutoTraitFinder<'a, 'tcx> {
289287
pub fn evaluate_predicates<'b, 'gcx, 'c>(
290288
&self,
291289
infcx: &InferCtxt<'b, 'tcx, 'c>,
292-
ty_did: DefId,
293290
trait_did: DefId,
294291
ty: Ty<'c>,
295292
param_env: ty::ParamEnv<'c>,
@@ -401,9 +398,9 @@ impl<'a, 'tcx> AutoTraitFinder<'a, 'tcx> {
401398
None
402399
);
403400
debug!(
404-
"evaluate_nested_obligations(ty_did={:?}, trait_did={:?}): succeeded with '{:?}' \
401+
"evaluate_nested_obligations(ty={:?}, trait_did={:?}): succeeded with '{:?}' \
405402
'{:?}'",
406-
ty_did, trait_did, new_env, final_user_env
403+
ty, trait_did, new_env, final_user_env
407404
);
408405

409406
return Some((new_env, final_user_env));

src/librustdoc/clean/auto_trait.rs

+52-82
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,6 @@ use rustc::traits::auto_trait as auto;
33
use rustc::ty::{self, TypeFoldable};
44
use std::fmt::Debug;
55

6-
use self::def_ctor::{get_def_from_def_id, get_def_from_hir_id};
7-
86
use super::*;
97

108
pub struct AutoTraitFinder<'a, 'tcx> {
@@ -19,103 +17,71 @@ impl<'a, 'tcx> AutoTraitFinder<'a, 'tcx> {
1917
AutoTraitFinder { cx, f }
2018
}
2119

22-
pub fn get_with_def_id(&self, def_id: DefId) -> Vec<Item> {
23-
get_def_from_def_id(&self.cx, def_id, &|def_ctor| {
24-
self.get_auto_trait_impls(def_id, &def_ctor, None)
25-
})
26-
}
27-
28-
pub fn get_with_hir_id(&self, id: hir::HirId, name: String) -> Vec<Item> {
29-
get_def_from_hir_id(&self.cx, id, name, &|def_ctor, name| {
30-
let did = self.cx.tcx.hir().local_def_id_from_hir_id(id);
31-
self.get_auto_trait_impls(did, &def_ctor, Some(name))
32-
})
33-
}
34-
35-
pub fn get_auto_trait_impls<F>(
20+
// FIXME(eddyb) figure out a better way to pass information about
21+
// parametrization of `ty` than `param_env_def_id`.
22+
pub fn get_auto_trait_impls(
3623
&self,
37-
def_id: DefId,
38-
def_ctor: &F,
39-
name: Option<String>,
40-
) -> Vec<Item>
41-
where F: Fn(DefId) -> Def {
42-
if self.cx
43-
.tcx
44-
.get_attrs(def_id)
45-
.lists("doc")
46-
.has_word("hidden")
47-
{
48-
debug!(
49-
"get_auto_trait_impls(def_id={:?}, def_ctor=...): item has doc('hidden'), \
50-
aborting",
51-
def_id
52-
);
53-
return Vec::new();
54-
}
55-
56-
let tcx = self.cx.tcx;
57-
let generics = self.cx.tcx.generics_of(def_id);
24+
ty: Ty<'tcx>,
25+
param_env_def_id: DefId,
26+
) -> Vec<Item> {
27+
let generics = self.cx.tcx.generics_of(param_env_def_id);
5828

5929
debug!(
60-
"get_auto_trait_impls(def_id={:?}, def_ctor=..., generics={:?}",
61-
def_id, generics
30+
"get_auto_trait_impls(param_env_def_id={:?}, generics={:?}",
31+
param_env_def_id, generics
6232
);
6333
let auto_traits: Vec<_> = self.cx
6434
.send_trait
6535
.and_then(|send_trait| {
6636
self.get_auto_trait_impl_for(
67-
def_id,
68-
name.clone(),
69-
generics.clone(),
70-
def_ctor,
37+
ty,
38+
param_env_def_id,
39+
generics,
7140
send_trait,
7241
)
7342
})
7443
.into_iter()
7544
.chain(self.get_auto_trait_impl_for(
76-
def_id,
77-
name,
78-
generics.clone(),
79-
def_ctor,
80-
tcx.require_lang_item(lang_items::SyncTraitLangItem),
45+
ty,
46+
param_env_def_id,
47+
generics,
48+
self.cx.tcx.require_lang_item(lang_items::SyncTraitLangItem),
8149
).into_iter())
8250
.collect();
8351

8452
debug!(
8553
"get_auto_traits: type {:?} auto_traits {:?}",
86-
def_id, auto_traits
54+
param_env_def_id, auto_traits
8755
);
8856
auto_traits
8957
}
9058

91-
fn get_auto_trait_impl_for<F>(
59+
fn get_auto_trait_impl_for(
9260
&self,
93-
def_id: DefId,
94-
name: Option<String>,
95-
generics: ty::Generics,
96-
def_ctor: &F,
61+
ty: Ty<'tcx>,
62+
param_env_def_id: DefId,
63+
generics: &ty::Generics,
9764
trait_def_id: DefId,
98-
) -> Option<Item>
99-
where F: Fn(DefId) -> Def {
65+
) -> Option<Item> {
10066
if !self.cx
10167
.generated_synthetics
10268
.borrow_mut()
103-
.insert((def_id, trait_def_id))
69+
.insert((param_env_def_id, trait_def_id))
10470
{
10571
debug!(
106-
"get_auto_trait_impl_for(def_id={:?}, generics={:?}, def_ctor=..., \
72+
"get_auto_trait_impl_for(param_env_def_id={:?}, generics={:?}, \
10773
trait_def_id={:?}): already generated, aborting",
108-
def_id, generics, trait_def_id
74+
param_env_def_id, generics, trait_def_id
10975
);
11076
return None;
11177
}
11278

113-
let result = self.find_auto_trait_generics(def_id, trait_def_id, &generics);
79+
let result = self.find_auto_trait_generics(ty, param_env_def_id, trait_def_id, &generics);
11480

11581
if result.is_auto() {
116-
let trait_ = hir::TraitRef {
117-
path: get_path_for_type(self.cx.tcx, trait_def_id, hir::def::Def::Trait),
118-
hir_ref_id: hir::DUMMY_HIR_ID,
82+
let trait_ref = ty::TraitRef {
83+
def_id: trait_def_id,
84+
substs: self.cx.tcx.mk_substs_trait(ty, &[]),
11985
};
12086

12187
let polarity;
@@ -140,7 +106,7 @@ impl<'a, 'tcx> AutoTraitFinder<'a, 'tcx> {
140106
// Instead, we generate `impl !Send for Foo<T>`, which better
141107
// expresses the fact that `Foo<T>` never implements `Send`,
142108
// regardless of the choice of `T`.
143-
let real_generics = (&generics, &Default::default());
109+
let real_generics = (generics, &Default::default());
144110

145111
// Clean the generics, but ignore the '?Sized' bounds generated
146112
// by the `Clean` impl
@@ -153,22 +119,20 @@ impl<'a, 'tcx> AutoTraitFinder<'a, 'tcx> {
153119
}
154120
_ => unreachable!(),
155121
};
156-
let real_name = name.map(|name| Ident::from_str(&name));
157-
let ty = self.cx.get_real_ty(def_id, def_ctor, &real_name, &generics);
158122

159123
return Some(Item {
160124
source: Span::empty(),
161125
name: None,
162126
attrs: Default::default(),
163127
visibility: None,
164-
def_id: self.cx.next_def_id(def_id.krate),
128+
def_id: self.cx.next_def_id(param_env_def_id.krate),
165129
stability: None,
166130
deprecation: None,
167131
inner: ImplItem(Impl {
168132
unsafety: hir::Unsafety::Normal,
169133
generics: new_generics,
170134
provided_trait_methods: Default::default(),
171-
trait_: Some(trait_.clean(self.cx)),
135+
trait_: Some(trait_ref.clean(self.cx).get_trait_type().unwrap()),
172136
for_: ty.clean(self.cx),
173137
items: Vec::new(),
174138
polarity,
@@ -182,11 +146,12 @@ impl<'a, 'tcx> AutoTraitFinder<'a, 'tcx> {
182146

183147
fn find_auto_trait_generics(
184148
&self,
185-
did: DefId,
149+
ty: Ty<'tcx>,
150+
param_env_def_id: DefId,
186151
trait_did: DefId,
187152
generics: &ty::Generics,
188153
) -> AutoTraitResult {
189-
match self.f.find_auto_trait_generics(did, trait_did, generics,
154+
match self.f.find_auto_trait_generics(ty, param_env_def_id, trait_did, generics,
190155
|infcx, mut info| {
191156
let region_data = info.region_data;
192157
let names_map =
@@ -198,17 +163,17 @@ impl<'a, 'tcx> AutoTraitFinder<'a, 'tcx> {
198163
self.handle_lifetimes(&region_data, &names_map);
199164
let new_generics = self.param_env_to_generics(
200165
infcx.tcx,
201-
did,
166+
param_env_def_id,
202167
info.full_user_env,
203-
generics.clone(),
168+
generics,
204169
lifetime_predicates,
205170
info.vid_to_region,
206171
);
207172

208173
debug!(
209-
"find_auto_trait_generics(did={:?}, trait_did={:?}, generics={:?}): \
174+
"find_auto_trait_generics(ty={:?}, trait_did={:?}, generics={:?}): \
210175
finished with {:?}",
211-
did, trait_did, generics, new_generics
176+
ty, trait_did, generics, new_generics
212177
);
213178

214179
new_generics
@@ -530,16 +495,16 @@ impl<'a, 'tcx> AutoTraitFinder<'a, 'tcx> {
530495
fn param_env_to_generics<'b, 'c, 'cx>(
531496
&self,
532497
tcx: TyCtxt<'b, 'c, 'cx>,
533-
did: DefId,
498+
param_env_def_id: DefId,
534499
param_env: ty::ParamEnv<'cx>,
535-
type_generics: ty::Generics,
500+
type_generics: &ty::Generics,
536501
mut existing_predicates: Vec<WherePredicate>,
537502
vid_to_region: FxHashMap<ty::RegionVid, ty::Region<'cx>>,
538503
) -> Generics {
539504
debug!(
540-
"param_env_to_generics(did={:?}, param_env={:?}, type_generics={:?}, \
505+
"param_env_to_generics(param_env_def_id={:?}, param_env={:?}, type_generics={:?}, \
541506
existing_predicates={:?})",
542-
did, param_env, type_generics, existing_predicates
507+
param_env_def_id, param_env, type_generics, existing_predicates
543508
);
544509

545510
// The `Sized` trait must be handled specially, since we only display it when
@@ -553,7 +518,8 @@ impl<'a, 'tcx> AutoTraitFinder<'a, 'tcx> {
553518
tcx,
554519
};
555520

556-
let orig_bounds: FxHashSet<_> = self.cx.tcx.param_env(did).caller_bounds.iter().collect();
521+
let orig_bounds: FxHashSet<_> =
522+
self.cx.tcx.param_env(param_env_def_id).caller_bounds.iter().collect();
557523
let clean_where_predicates = param_env
558524
.caller_bounds
559525
.iter()
@@ -568,7 +534,7 @@ impl<'a, 'tcx> AutoTraitFinder<'a, 'tcx> {
568534
(replaced.clone(), replaced.clean(self.cx))
569535
});
570536

571-
let full_generics = (&type_generics, &tcx.explicit_predicates_of(did));
537+
let full_generics = (type_generics, &tcx.explicit_predicates_of(param_env_def_id));
572538
let Generics {
573539
params: mut generic_params,
574540
..
@@ -757,10 +723,14 @@ impl<'a, 'tcx> AutoTraitFinder<'a, 'tcx> {
757723
.or_default()
758724
.insert(*trait_.clone());
759725
}
760-
_ => panic!("Unexpected trait {:?} for {:?}", trait_, did),
726+
_ => panic!(
727+
"Unexpected trait {:?} for {:?}",
728+
trait_,
729+
param_env_def_id,
730+
),
761731
}
762732
}
763-
_ => panic!("Unexpected LHS {:?} for {:?}", lhs, did),
733+
_ => panic!("Unexpected LHS {:?} for {:?}", lhs, param_env_def_id),
764734
}
765735
}
766736
};

0 commit comments

Comments
 (0)