Auto merge of #107753 - kylematsuda:type-of, r=BoxyUwU
Switch to `EarlyBinder` for `type_of` query Part of the work to finish #105779 and implement https://github.com/rust-lang/types-team/issues/78. Several queries `X` have a `bound_X` variant that wraps the output in `EarlyBinder`. This adds `EarlyBinder` to the return type of the `type_of` query and removes `bound_type_of`. r? `@lcnr`
This commit is contained in:
commit
9556b56dbd
164 changed files with 443 additions and 334 deletions
|
@ -207,7 +207,7 @@ where
|
|||
// so we need to visit the self type additionally.
|
||||
if let Some(assoc_item) = tcx.opt_associated_item(def_id) {
|
||||
if let Some(impl_def_id) = assoc_item.impl_container(tcx) {
|
||||
tcx.type_of(impl_def_id).visit_with(self)?;
|
||||
tcx.type_of(impl_def_id).subst_identity().visit_with(self)?;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -342,7 +342,7 @@ trait VisibilityLike: Sized {
|
|||
effective_visibilities: &EffectiveVisibilities,
|
||||
) -> Self {
|
||||
let mut find = FindMin { tcx, effective_visibilities, min: Self::MAX };
|
||||
find.visit(tcx.type_of(def_id));
|
||||
find.visit(tcx.type_of(def_id).subst_identity());
|
||||
if let Some(trait_ref) = tcx.impl_trait_ref(def_id) {
|
||||
find.visit_trait(trait_ref.subst_identity());
|
||||
}
|
||||
|
@ -838,11 +838,11 @@ impl ReachEverythingInTheInterfaceVisitor<'_, '_> {
|
|||
GenericParamDefKind::Lifetime => {}
|
||||
GenericParamDefKind::Type { has_default, .. } => {
|
||||
if has_default {
|
||||
self.visit(self.ev.tcx.type_of(param.def_id));
|
||||
self.visit(self.ev.tcx.type_of(param.def_id).subst_identity());
|
||||
}
|
||||
}
|
||||
GenericParamDefKind::Const { has_default } => {
|
||||
self.visit(self.ev.tcx.type_of(param.def_id));
|
||||
self.visit(self.ev.tcx.type_of(param.def_id).subst_identity());
|
||||
if has_default {
|
||||
self.visit(self.ev.tcx.const_param_default(param.def_id).subst_identity());
|
||||
}
|
||||
|
@ -858,7 +858,7 @@ impl ReachEverythingInTheInterfaceVisitor<'_, '_> {
|
|||
}
|
||||
|
||||
fn ty(&mut self) -> &mut Self {
|
||||
self.visit(self.ev.tcx.type_of(self.item_def_id));
|
||||
self.visit(self.ev.tcx.type_of(self.item_def_id).subst_identity());
|
||||
self
|
||||
}
|
||||
|
||||
|
@ -1269,7 +1269,7 @@ impl<'tcx> Visitor<'tcx> for TypePrivacyVisitor<'tcx> {
|
|||
// Method calls have to be checked specially.
|
||||
self.span = segment.ident.span;
|
||||
if let Some(def_id) = self.typeck_results().type_dependent_def_id(expr.hir_id) {
|
||||
if self.visit(self.tcx.type_of(def_id)).is_break() {
|
||||
if self.visit(self.tcx.type_of(def_id).subst_identity()).is_break() {
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
|
@ -1743,12 +1743,12 @@ impl SearchInterfaceForPrivateItemsVisitor<'_> {
|
|||
GenericParamDefKind::Lifetime => {}
|
||||
GenericParamDefKind::Type { has_default, .. } => {
|
||||
if has_default {
|
||||
self.visit(self.tcx.type_of(param.def_id));
|
||||
self.visit(self.tcx.type_of(param.def_id).subst_identity());
|
||||
}
|
||||
}
|
||||
// FIXME(generic_const_exprs): May want to look inside const here
|
||||
GenericParamDefKind::Const { .. } => {
|
||||
self.visit(self.tcx.type_of(param.def_id));
|
||||
self.visit(self.tcx.type_of(param.def_id).subst_identity());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1775,7 +1775,7 @@ impl SearchInterfaceForPrivateItemsVisitor<'_> {
|
|||
}
|
||||
|
||||
fn ty(&mut self) -> &mut Self {
|
||||
self.visit(self.tcx.type_of(self.item_def_id));
|
||||
self.visit(self.tcx.type_of(self.item_def_id).subst_identity());
|
||||
self
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue