Skip to content

Commit c47c2c6

Browse files
committed
Remove unnecessary self_ty parameter to get_blanket_impls
It can be calculated when necessary at the callsite, there's no need to pass it separately. This also renames `param_env_def_id` to `item_def_id`.
1 parent fe1bf8e commit c47c2c6

File tree

4 files changed

+33
-48
lines changed

4 files changed

+33
-48
lines changed

src/librustdoc/clean/auto_trait.rs

+23-30
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ impl<'a, 'tcx> AutoTraitFinder<'a, 'tcx> {
3434
ty: Ty<'tcx>,
3535
trait_def_id: DefId,
3636
param_env: ty::ParamEnv<'tcx>,
37-
param_env_def_id: DefId,
37+
item_def_id: DefId,
3838
f: &auto_trait::AutoTraitFinder<'tcx>,
3939
// If this is set, show only negative trait implementations, not positive ones.
4040
discard_positive_impl: bool,
@@ -50,7 +50,7 @@ impl<'a, 'tcx> AutoTraitFinder<'a, 'tcx> {
5050
let region_data = info.region_data;
5151

5252
let names_map = tcx
53-
.generics_of(param_env_def_id)
53+
.generics_of(item_def_id)
5454
.params
5555
.iter()
5656
.filter_map(|param| match param.kind {
@@ -62,16 +62,16 @@ impl<'a, 'tcx> AutoTraitFinder<'a, 'tcx> {
6262
let lifetime_predicates = Self::handle_lifetimes(&region_data, &names_map);
6363
let new_generics = self.param_env_to_generics(
6464
infcx.tcx,
65-
param_env_def_id,
65+
item_def_id,
6666
info.full_user_env,
6767
lifetime_predicates,
6868
info.vid_to_region,
6969
);
7070

7171
debug!(
72-
"find_auto_trait_generics(param_env_def_id={:?}, trait_def_id={:?}): \
72+
"find_auto_trait_generics(item_def_id={:?}, trait_def_id={:?}): \
7373
finished with {:?}",
74-
param_env_def_id, trait_def_id, new_generics
74+
item_def_id, trait_def_id, new_generics
7575
);
7676

7777
new_generics
@@ -101,7 +101,7 @@ impl<'a, 'tcx> AutoTraitFinder<'a, 'tcx> {
101101
// Instead, we generate `impl !Send for Foo<T>`, which better
102102
// expresses the fact that `Foo<T>` never implements `Send`,
103103
// 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())
105105
.clean(self.cx)
106106
.params;
107107

@@ -115,7 +115,7 @@ impl<'a, 'tcx> AutoTraitFinder<'a, 'tcx> {
115115
name: None,
116116
attrs: Default::default(),
117117
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),
119119
kind: box ImplItem(Impl {
120120
unsafety: hir::Unsafety::Normal,
121121
generics: new_generics,
@@ -130,26 +130,25 @@ impl<'a, 'tcx> AutoTraitFinder<'a, 'tcx> {
130130
})
131131
}
132132

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> {
136134
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);
139138

140139
debug!("get_auto_trait_impls({:?})", ty);
141140
let auto_traits: Vec<_> = self.cx.auto_traits.iter().cloned().collect();
142141
let mut auto_traits: Vec<Item> = auto_traits
143142
.into_iter()
144143
.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)
146145
})
147146
.collect();
148147
// 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) {
150149
// 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)
153152
}) {
154153
auto_traits.push(item);
155154
}
@@ -445,15 +444,15 @@ impl<'a, 'tcx> AutoTraitFinder<'a, 'tcx> {
445444
fn param_env_to_generics(
446445
&mut self,
447446
tcx: TyCtxt<'tcx>,
448-
param_env_def_id: DefId,
447+
item_def_id: DefId,
449448
param_env: ty::ParamEnv<'tcx>,
450449
mut existing_predicates: Vec<WherePredicate>,
451450
vid_to_region: FxHashMap<ty::RegionVid, ty::Region<'tcx>>,
452451
) -> Generics {
453452
debug!(
454-
"param_env_to_generics(param_env_def_id={:?}, param_env={:?}, \
453+
"param_env_to_generics(item_def_id={:?}, param_env={:?}, \
455454
existing_predicates={:?})",
456-
param_env_def_id, param_env, existing_predicates
455+
item_def_id, param_env, existing_predicates
457456
);
458457

459458
// The `Sized` trait must be handled specially, since we only display it when
@@ -463,7 +462,7 @@ impl<'a, 'tcx> AutoTraitFinder<'a, 'tcx> {
463462
let mut replacer = RegionReplacer { vid_to_region: &vid_to_region, tcx };
464463

465464
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();
467466
let clean_where_predicates = param_env
468467
.caller_bounds()
469468
.iter()
@@ -477,14 +476,11 @@ impl<'a, 'tcx> AutoTraitFinder<'a, 'tcx> {
477476
.map(|p| p.fold_with(&mut replacer));
478477

479478
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))
481480
.clean(self.cx)
482481
.params;
483482

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);
488484

489485
let mut has_sized = FxHashSet::default();
490486
let mut ty_to_bounds: FxHashMap<_, FxHashSet<_>> = Default::default();
@@ -648,13 +644,10 @@ impl<'a, 'tcx> AutoTraitFinder<'a, 'tcx> {
648644
.or_default()
649645
.insert(*trait_.clone());
650646
}
651-
_ => panic!(
652-
"Unexpected trait {:?} for {:?}",
653-
trait_, param_env_def_id,
654-
),
647+
_ => panic!("Unexpected trait {:?} for {:?}", trait_, item_def_id),
655648
}
656649
}
657-
_ => panic!("Unexpected LHS {:?} for {:?}", lhs, param_env_def_id),
650+
_ => panic!("Unexpected LHS {:?} for {:?}", lhs, item_def_id),
658651
}
659652
}
660653
};

src/librustdoc/clean/blanket_impl.rs

+4-5
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,9 @@ crate struct BlanketImplFinder<'a, 'tcx> {
1414
}
1515

1616
impl<'a, 'tcx> BlanketImplFinder<'a, 'tcx> {
17-
// FIXME(eddyb) figure out a better way to pass information about
18-
// parametrization of `ty` than `param_env_def_id`.
19-
crate fn get_blanket_impls(&mut self, ty: Ty<'tcx>, param_env_def_id: DefId) -> Vec<Item> {
20-
let param_env = self.cx.tcx.param_env(param_env_def_id);
17+
crate fn get_blanket_impls(&mut self, item_def_id: DefId) -> Vec<Item> {
18+
let param_env = self.cx.tcx.param_env(item_def_id);
19+
let ty = self.cx.tcx.type_of(item_def_id);
2120

2221
debug!("get_blanket_impls({:?})", ty);
2322
let mut impls = Vec::new();
@@ -39,7 +38,7 @@ impl<'a, 'tcx> BlanketImplFinder<'a, 'tcx> {
3938
_ => return false,
4039
}
4140

42-
let substs = infcx.fresh_substs_for_item(DUMMY_SP, param_env_def_id);
41+
let substs = infcx.fresh_substs_for_item(DUMMY_SP, item_def_id);
4342
let ty = ty.subst(infcx.tcx, substs);
4443
let param_env = param_env.subst(infcx.tcx, substs);
4544

src/librustdoc/clean/utils.rs

+4-5
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ use rustc_hir::def::{DefKind, Res};
1313
use rustc_hir::def_id::{DefId, LOCAL_CRATE};
1414
use rustc_middle::mir::interpret::ConstValue;
1515
use rustc_middle::ty::subst::{GenericArgKind, SubstsRef};
16-
use rustc_middle::ty::{self, DefIdTree, Ty, TyCtxt};
16+
use rustc_middle::ty::{self, DefIdTree, TyCtxt};
1717
use rustc_span::symbol::{kw, sym, Symbol};
1818
use std::mem;
1919

@@ -426,19 +426,18 @@ crate fn resolve_type(cx: &mut DocContext<'_>, path: Path, id: hir::HirId) -> Ty
426426

427427
crate fn get_auto_trait_and_blanket_impls(
428428
cx: &mut DocContext<'tcx>,
429-
ty: Ty<'tcx>,
430-
param_env_def_id: DefId,
429+
item_def_id: DefId,
431430
) -> impl Iterator<Item = Item> {
432431
let auto_impls = cx
433432
.sess()
434433
.prof
435434
.generic_activity("get_auto_trait_impls")
436-
.run(|| AutoTraitFinder::new(cx).get_auto_trait_impls(ty, param_env_def_id));
435+
.run(|| AutoTraitFinder::new(cx).get_auto_trait_impls(item_def_id));
437436
let blanket_impls = cx
438437
.sess()
439438
.prof
440439
.generic_activity("get_blanket_impls")
441-
.run(|| BlanketImplFinder { cx }.get_blanket_impls(ty, param_env_def_id));
440+
.run(|| BlanketImplFinder { cx }.get_blanket_impls(item_def_id));
442441
auto_impls.into_iter().chain(blanket_impls)
443442
}
444443

src/librustdoc/passes/collect_trait_impls.rs

+2-8
Original file line numberDiff line numberDiff line change
@@ -46,9 +46,7 @@ crate fn collect_trait_impls(krate: Crate, cx: &mut DocContext<'_>) -> Crate {
4646

4747
// FIXME(eddyb) is this `doc(hidden)` check needed?
4848
if !cx.tcx.get_attrs(def_id).lists(sym::doc).has_word(sym::hidden) {
49-
let self_ty = cx.tcx.type_of(def_id);
50-
let impls = get_auto_trait_and_blanket_impls(cx, self_ty, def_id);
51-
49+
let impls = get_auto_trait_and_blanket_impls(cx, def_id);
5250
new_items.extend(impls.filter(|i| cx.renderinfo.inlined.insert(i.def_id)));
5351
}
5452
});
@@ -170,11 +168,7 @@ impl<'a, 'tcx> DocFolder for SyntheticImplCollector<'a, 'tcx> {
170168
if i.is_struct() || i.is_enum() || i.is_union() {
171169
// FIXME(eddyb) is this `doc(hidden)` check needed?
172170
if !self.cx.tcx.get_attrs(i.def_id).lists(sym::doc).has_word(sym::hidden) {
173-
self.impls.extend(get_auto_trait_and_blanket_impls(
174-
self.cx,
175-
self.cx.tcx.type_of(i.def_id),
176-
i.def_id,
177-
));
171+
self.impls.extend(get_auto_trait_and_blanket_impls(self.cx, i.def_id));
178172
}
179173
}
180174

0 commit comments

Comments
 (0)