remove bound_type_of query; make type_of return EarlyBinder; change type_of in metadata
This commit is contained in:
parent
d822b97a27
commit
c183110cc2
164 changed files with 325 additions and 380 deletions
|
@ -104,7 +104,7 @@ impl<'tcx> TyCtxt<'tcx> {
|
|||
self.impl_trait_ref(def_id)
|
||||
.map(|t| t.subst_identity())
|
||||
.map(ImplSubject::Trait)
|
||||
.unwrap_or_else(|| ImplSubject::Inherent(self.bound_type_of(def_id).subst_identity()))
|
||||
.unwrap_or_else(|| ImplSubject::Inherent(self.type_of(def_id).subst_identity()))
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -2497,7 +2497,7 @@ impl<'tcx> ConstantKind<'tcx> {
|
|||
};
|
||||
debug!("expr.kind: {:?}", expr.kind);
|
||||
|
||||
let ty = tcx.bound_type_of(def.def_id_for_type_of()).subst_identity();
|
||||
let ty = tcx.type_of(def.def_id_for_type_of()).subst_identity();
|
||||
debug!(?ty);
|
||||
|
||||
// FIXME(const_generics): We currently have to special case parameters because `min_const_generics`
|
||||
|
|
|
@ -165,7 +165,7 @@ impl<'tcx> Rvalue<'tcx> {
|
|||
tcx.mk_array_with_const_len(operand.ty(local_decls, tcx), count)
|
||||
}
|
||||
Rvalue::ThreadLocalRef(did) => {
|
||||
let static_ty = tcx.bound_type_of(did).subst_identity();
|
||||
let static_ty = tcx.type_of(did).subst_identity();
|
||||
if tcx.is_mutable_static(did) {
|
||||
tcx.mk_mut_ptr(static_ty)
|
||||
} else if tcx.is_foreign_item(did) {
|
||||
|
@ -202,9 +202,7 @@ impl<'tcx> Rvalue<'tcx> {
|
|||
Rvalue::Aggregate(ref ak, ref ops) => match **ak {
|
||||
AggregateKind::Array(ty) => tcx.mk_array(ty, ops.len() as u64),
|
||||
AggregateKind::Tuple => tcx.mk_tup(ops.iter().map(|op| op.ty(local_decls, tcx))),
|
||||
AggregateKind::Adt(did, _, substs, _, _) => {
|
||||
tcx.bound_type_of(did).subst(tcx, substs)
|
||||
}
|
||||
AggregateKind::Adt(did, _, substs, _, _) => tcx.type_of(did).subst(tcx, substs),
|
||||
AggregateKind::Closure(did, substs) => tcx.mk_closure(did, substs),
|
||||
AggregateKind::Generator(did, substs, movability) => {
|
||||
tcx.mk_generator(did, substs, movability)
|
||||
|
|
|
@ -152,7 +152,7 @@ rustc_queries! {
|
|||
/// to an alias, it will "skip" this alias to return the aliased type.
|
||||
///
|
||||
/// [`DefId`]: rustc_hir::def_id::DefId
|
||||
query type_of(key: DefId) -> Ty<'tcx> {
|
||||
query type_of(key: DefId) -> ty::EarlyBinder<Ty<'tcx>> {
|
||||
desc { |tcx|
|
||||
"{action} `{path}`",
|
||||
action = {
|
||||
|
|
|
@ -263,9 +263,7 @@ pub fn ancestors(
|
|||
|
||||
if let Some(reported) = specialization_graph.has_errored {
|
||||
Err(reported)
|
||||
} else if let Err(reported) =
|
||||
tcx.bound_type_of(start_from_impl).subst_identity().error_reported()
|
||||
{
|
||||
} else if let Err(reported) = tcx.type_of(start_from_impl).subst_identity().error_reported() {
|
||||
Err(reported)
|
||||
} else {
|
||||
Ok(Ancestors {
|
||||
|
|
|
@ -83,11 +83,7 @@ impl AssocItem {
|
|||
}
|
||||
ty::AssocKind::Type => format!("type {};", self.name),
|
||||
ty::AssocKind::Const => {
|
||||
format!(
|
||||
"const {}: {:?};",
|
||||
self.name,
|
||||
tcx.bound_type_of(self.def_id).subst_identity()
|
||||
)
|
||||
format!("const {}: {:?};", self.name, tcx.type_of(self.def_id).subst_identity())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -71,7 +71,7 @@ impl<'tcx> Const<'tcx> {
|
|||
let expr = &tcx.hir().body(body_id).value;
|
||||
debug!(?expr);
|
||||
|
||||
let ty = tcx.bound_type_of(def.def_id_for_type_of()).subst_identity();
|
||||
let ty = tcx.type_of(def.def_id_for_type_of()).subst_identity();
|
||||
|
||||
match Self::try_eval_lit_or_param(tcx, ty, expr) {
|
||||
Some(v) => v,
|
||||
|
|
|
@ -1149,7 +1149,7 @@ impl<'tcx> TyCtxt<'tcx> {
|
|||
_ => return None,
|
||||
}
|
||||
|
||||
let ret_ty = self.bound_type_of(scope_def_id).subst_identity();
|
||||
let ret_ty = self.type_of(scope_def_id).subst_identity();
|
||||
match ret_ty.kind() {
|
||||
ty::FnDef(_, _) => {
|
||||
let sig = ret_ty.fn_sig(self);
|
||||
|
@ -1189,7 +1189,7 @@ impl<'tcx> TyCtxt<'tcx> {
|
|||
pub fn caller_location_ty(self) -> Ty<'tcx> {
|
||||
self.mk_imm_ref(
|
||||
self.lifetimes.re_static,
|
||||
self.bound_type_of(self.require_lang_item(LangItem::PanicLocation, None))
|
||||
self.type_of(self.require_lang_item(LangItem::PanicLocation, None))
|
||||
.subst(self, self.mk_substs([self.lifetimes.re_static.into()].iter())),
|
||||
)
|
||||
}
|
||||
|
@ -1754,7 +1754,7 @@ impl<'tcx> TyCtxt<'tcx> {
|
|||
ty_param.into()
|
||||
} else {
|
||||
assert!(has_default);
|
||||
self.bound_type_of(param.def_id).subst(self, substs).into()
|
||||
self.type_of(param.def_id).subst(self, substs).into()
|
||||
}
|
||||
}
|
||||
});
|
||||
|
@ -2002,7 +2002,7 @@ impl<'tcx> TyCtxt<'tcx> {
|
|||
GenericParamDefKind::Const { .. } => self
|
||||
.mk_const(
|
||||
ParamConst { index: param.index, name: param.name },
|
||||
self.bound_type_of(param.def_id).subst_identity(),
|
||||
self.type_of(param.def_id).subst_identity(),
|
||||
)
|
||||
.into(),
|
||||
}
|
||||
|
|
|
@ -481,7 +481,7 @@ impl<'tcx> TypeVisitor<TyCtxt<'tcx>> for IsSuggestableVisitor<'tcx> {
|
|||
|
||||
Alias(Opaque, AliasTy { def_id, .. }) => {
|
||||
let parent = self.tcx.parent(def_id);
|
||||
let parent_ty = self.tcx.bound_type_of(parent).subst_identity();
|
||||
let parent_ty = self.tcx.type_of(parent).subst_identity();
|
||||
if let DefKind::TyAlias | DefKind::AssocTy = self.tcx.def_kind(parent)
|
||||
&& let Alias(Opaque, AliasTy { def_id: parent_opaque_def_id, .. }) = *parent_ty.kind()
|
||||
&& parent_opaque_def_id == def_id
|
||||
|
@ -565,7 +565,7 @@ impl<'tcx> FallibleTypeFolder<TyCtxt<'tcx>> for MakeSuggestableFolder<'tcx> {
|
|||
|
||||
Alias(Opaque, AliasTy { def_id, .. }) => {
|
||||
let parent = self.tcx.parent(def_id);
|
||||
let parent_ty = self.tcx.bound_type_of(parent).subst_identity();
|
||||
let parent_ty = self.tcx.type_of(parent).subst_identity();
|
||||
if let hir::def::DefKind::TyAlias | hir::def::DefKind::AssocTy = self.tcx.def_kind(parent)
|
||||
&& let Alias(Opaque, AliasTy { def_id: parent_opaque_def_id, .. }) = *parent_ty.kind()
|
||||
&& parent_opaque_def_id == def_id
|
||||
|
|
|
@ -85,7 +85,7 @@ impl GenericParamDef {
|
|||
) -> Option<EarlyBinder<ty::GenericArg<'tcx>>> {
|
||||
match self.kind {
|
||||
GenericParamDefKind::Type { has_default, .. } if has_default => {
|
||||
Some(tcx.bound_type_of(self.def_id).map_bound(|t| t.into()))
|
||||
Some(tcx.type_of(self.def_id).map_bound(|t| t.into()))
|
||||
}
|
||||
GenericParamDefKind::Const { has_default } if has_default => {
|
||||
Some(tcx.const_param_default(self.def_id).map_bound(|c| c.into()))
|
||||
|
@ -103,7 +103,7 @@ impl GenericParamDef {
|
|||
ty::GenericParamDefKind::Lifetime => tcx.mk_re_error_misc().into(),
|
||||
ty::GenericParamDefKind::Type { .. } => tcx.ty_error().into(),
|
||||
ty::GenericParamDefKind::Const { .. } => {
|
||||
tcx.const_error(tcx.bound_type_of(self.def_id).subst(tcx, preceding_substs)).into()
|
||||
tcx.const_error(tcx.type_of(self.def_id).subst(tcx, preceding_substs)).into()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -87,7 +87,7 @@ impl<'tcx> VariantDef {
|
|||
InhabitedPredicate::all(
|
||||
tcx,
|
||||
self.fields.iter().map(|field| {
|
||||
let pred = tcx.bound_type_of(field.did).subst_identity().inhabited_predicate(tcx);
|
||||
let pred = tcx.type_of(field.did).subst_identity().inhabited_predicate(tcx);
|
||||
if adt.is_enum() {
|
||||
return pred;
|
||||
}
|
||||
|
|
|
@ -102,7 +102,7 @@ impl<'tcx> Instance<'tcx> {
|
|||
/// Returns the `Ty` corresponding to this `Instance`, with generic substitutions applied and
|
||||
/// lifetimes erased, allowing a `ParamEnv` to be specified for use during normalization.
|
||||
pub fn ty(&self, tcx: TyCtxt<'tcx>, param_env: ty::ParamEnv<'tcx>) -> Ty<'tcx> {
|
||||
let ty = tcx.bound_type_of(self.def.def_id());
|
||||
let ty = tcx.type_of(self.def.def_id());
|
||||
tcx.subst_and_normalize_erasing_regions(self.substs, param_env, ty.skip_binder())
|
||||
}
|
||||
|
||||
|
@ -662,7 +662,7 @@ fn polymorphize<'tcx>(
|
|||
let def_id = instance.def_id();
|
||||
let upvars_ty = if tcx.is_closure(def_id) {
|
||||
Some(substs.as_closure().tupled_upvars_ty())
|
||||
} else if tcx.bound_type_of(def_id).skip_binder().is_generator() {
|
||||
} else if tcx.type_of(def_id).skip_binder().is_generator() {
|
||||
Some(substs.as_generator().tupled_upvars_ty())
|
||||
} else {
|
||||
None
|
||||
|
|
|
@ -2017,7 +2017,7 @@ impl<'tcx> FieldDef {
|
|||
/// Returns the type of this field. The resulting type is not normalized. The `subst` is
|
||||
/// typically obtained via the second field of [`TyKind::Adt`].
|
||||
pub fn ty(&self, tcx: TyCtxt<'tcx>, subst: SubstsRef<'tcx>) -> Ty<'tcx> {
|
||||
tcx.bound_type_of(self.did).subst(tcx, subst)
|
||||
tcx.type_of(self.did).subst(tcx, subst)
|
||||
}
|
||||
|
||||
/// Computes the `Ident` of this variant by looking up the `Span`
|
||||
|
|
|
@ -115,7 +115,7 @@ pub trait Printer<'tcx>: Sized {
|
|||
|
||||
DefPathData::Impl => {
|
||||
let generics = self.tcx().generics_of(def_id);
|
||||
let self_ty = self.tcx().bound_type_of(def_id);
|
||||
let self_ty = self.tcx().type_of(def_id);
|
||||
let impl_trait_ref = self.tcx().impl_trait_ref(def_id);
|
||||
let (self_ty, impl_trait_ref) = if substs.len() >= generics.count() {
|
||||
(
|
||||
|
|
|
@ -754,7 +754,7 @@ pub trait PrettyPrinter<'tcx>:
|
|||
// NOTE: I know we should check for NO_QUERIES here, but it's alright.
|
||||
// `type_of` on a type alias or assoc type should never cause a cycle.
|
||||
if let ty::Alias(ty::Opaque, ty::AliasTy { def_id: d, .. }) =
|
||||
*self.tcx().bound_type_of(parent).subst_identity().kind()
|
||||
*self.tcx().type_of(parent).subst_identity().kind()
|
||||
{
|
||||
if d == def_id {
|
||||
// If the type alias directly starts with the `impl` of the
|
||||
|
|
|
@ -435,10 +435,6 @@ impl<'tcx> TyCtxt<'tcx> {
|
|||
self.opt_def_kind(def_id)
|
||||
.unwrap_or_else(|| bug!("def_kind: unsupported node: {:?}", def_id))
|
||||
}
|
||||
|
||||
pub fn bound_type_of(self, def_id: impl IntoQueryParam<DefId>) -> ty::EarlyBinder<Ty<'tcx>> {
|
||||
ty::EarlyBinder(self.type_of(def_id))
|
||||
}
|
||||
}
|
||||
|
||||
impl<'tcx> TyCtxtAt<'tcx> {
|
||||
|
@ -447,8 +443,4 @@ impl<'tcx> TyCtxtAt<'tcx> {
|
|||
self.opt_def_kind(def_id)
|
||||
.unwrap_or_else(|| bug!("def_kind: unsupported node: {:?}", def_id))
|
||||
}
|
||||
|
||||
pub fn bound_type_of(self, def_id: impl IntoQueryParam<DefId>) -> ty::EarlyBinder<Ty<'tcx>> {
|
||||
ty::EarlyBinder(self.type_of(def_id))
|
||||
}
|
||||
}
|
||||
|
|
|
@ -163,8 +163,7 @@ pub fn relate_substs_with_variances<'tcx, R: TypeRelation<'tcx>>(
|
|||
let params = iter::zip(a_subst, b_subst).enumerate().map(|(i, (a, b))| {
|
||||
let variance = variances[i];
|
||||
let variance_info = if variance == ty::Invariant && fetch_ty_for_diag {
|
||||
let ty =
|
||||
*cached_ty.get_or_insert_with(|| tcx.bound_type_of(ty_def_id).subst(tcx, a_subst));
|
||||
let ty = *cached_ty.get_or_insert_with(|| tcx.type_of(ty_def_id).subst(tcx, a_subst));
|
||||
ty::VarianceDiagInfo::Invariant { ty, param_index: i.try_into().unwrap() }
|
||||
} else {
|
||||
ty::VarianceDiagInfo::default()
|
||||
|
|
|
@ -2268,7 +2268,7 @@ impl<'tcx> Ty<'tcx> {
|
|||
ty::Str | ty::Slice(_) => (tcx.types.usize, false),
|
||||
ty::Dynamic(..) => {
|
||||
let dyn_metadata = tcx.require_lang_item(LangItem::DynMetadata, None);
|
||||
(tcx.bound_type_of(dyn_metadata).subst(tcx, &[tail.into()]), false)
|
||||
(tcx.type_of(dyn_metadata).subst(tcx, &[tail.into()]), false)
|
||||
},
|
||||
|
||||
// type parameters only have unit metadata if they're sized, so return true
|
||||
|
|
|
@ -225,7 +225,7 @@ pub(super) fn trait_impls_of_provider(tcx: TyCtxt<'_>, trait_id: DefId) -> Trait
|
|||
for &impl_def_id in tcx.hir().trait_impls(trait_id) {
|
||||
let impl_def_id = impl_def_id.to_def_id();
|
||||
|
||||
let impl_self_ty = tcx.bound_type_of(impl_def_id).subst_identity();
|
||||
let impl_self_ty = tcx.type_of(impl_def_id).subst_identity();
|
||||
if impl_self_ty.references_error() {
|
||||
continue;
|
||||
}
|
||||
|
|
|
@ -362,7 +362,7 @@ impl<'tcx> TyCtxt<'tcx> {
|
|||
let drop_trait = self.lang_items().drop_trait()?;
|
||||
self.ensure().coherent_trait(drop_trait);
|
||||
|
||||
let ty = self.bound_type_of(adt_did).subst_identity();
|
||||
let ty = self.type_of(adt_did).subst_identity();
|
||||
let (did, constness) = self.find_map_relevant_impl(drop_trait, ty, |impl_did| {
|
||||
if let Some(item_id) = self.associated_item_def_ids(impl_did).first() {
|
||||
if validate(self, impl_did).is_ok() {
|
||||
|
@ -415,12 +415,12 @@ impl<'tcx> TyCtxt<'tcx> {
|
|||
// <P1, P2, P0>, and then look up which of the impl substs refer to
|
||||
// parameters marked as pure.
|
||||
|
||||
let impl_substs = match *self.bound_type_of(impl_def_id).subst_identity().kind() {
|
||||
let impl_substs = match *self.type_of(impl_def_id).subst_identity().kind() {
|
||||
ty::Adt(def_, substs) if def_ == def => substs,
|
||||
_ => bug!(),
|
||||
};
|
||||
|
||||
let item_substs = match *self.bound_type_of(def.did()).subst_identity().kind() {
|
||||
let item_substs = match *self.type_of(def.did()).subst_identity().kind() {
|
||||
ty::Adt(def_, substs) if def_ == def => substs,
|
||||
_ => bug!(),
|
||||
};
|
||||
|
@ -604,7 +604,7 @@ impl<'tcx> TyCtxt<'tcx> {
|
|||
// Make sure that any constants in the static's type are evaluated.
|
||||
let static_ty = self.normalize_erasing_regions(
|
||||
ty::ParamEnv::empty(),
|
||||
self.bound_type_of(def_id).subst_identity(),
|
||||
self.type_of(def_id).subst_identity(),
|
||||
);
|
||||
|
||||
// Make sure that accesses to unsafe statics end up using raw pointers.
|
||||
|
@ -793,7 +793,7 @@ impl<'tcx> OpaqueTypeExpander<'tcx> {
|
|||
let expanded_ty = match self.expanded_cache.get(&(def_id, substs)) {
|
||||
Some(expanded_ty) => *expanded_ty,
|
||||
None => {
|
||||
let generic_ty = self.tcx.bound_type_of(def_id);
|
||||
let generic_ty = self.tcx.type_of(def_id);
|
||||
let concrete_ty = generic_ty.subst(self.tcx, substs);
|
||||
let expanded_ty = self.fold_ty(concrete_ty);
|
||||
self.expanded_cache.insert((def_id, substs), expanded_ty);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue