ProjectionTy.item_def_id -> ProjectionTy.def_id
This commit is contained in:
parent
7f3af72606
commit
5c6afb850c
50 changed files with 164 additions and 186 deletions
|
@ -2599,7 +2599,7 @@ impl<'tcx> TyCtxt<'tcx> {
|
|||
substs.len(),
|
||||
"wrong number of generic parameters for {item_def_id:?}: {substs:?}",
|
||||
);
|
||||
self.mk_ty(Projection(ProjectionTy { item_def_id, substs }))
|
||||
self.mk_ty(Projection(ProjectionTy { def_id: item_def_id, substs }))
|
||||
}
|
||||
|
||||
#[inline]
|
||||
|
|
|
@ -443,7 +443,7 @@ impl<'tcx> TyCtxt<'tcx> {
|
|||
diag.note("an associated type was expected, but a different one was found");
|
||||
}
|
||||
(ty::Param(p), ty::Projection(proj)) | (ty::Projection(proj), ty::Param(p))
|
||||
if self.def_kind(proj.item_def_id) != DefKind::ImplTraitPlaceholder =>
|
||||
if self.def_kind(proj.def_id) != DefKind::ImplTraitPlaceholder =>
|
||||
{
|
||||
let generics = self.generics_of(body_owner_def_id);
|
||||
let p_span = self.def_span(generics.type_param(p, self).def_id);
|
||||
|
@ -466,7 +466,7 @@ impl<'tcx> TyCtxt<'tcx> {
|
|||
let (trait_ref, assoc_substs) = proj.trait_ref_and_own_substs(self);
|
||||
let path =
|
||||
self.def_path_str_with_substs(trait_ref.def_id, trait_ref.substs);
|
||||
let item_name = self.item_name(proj.item_def_id);
|
||||
let item_name = self.item_name(proj.def_id);
|
||||
let item_args = self.format_generic_args(assoc_substs);
|
||||
|
||||
let path = if path.ends_with('>') {
|
||||
|
@ -553,7 +553,7 @@ impl<T> Trait<T> for X {
|
|||
diag.span_label(p_span, "this type parameter");
|
||||
}
|
||||
}
|
||||
(ty::Projection(proj_ty), _) if self.def_kind(proj_ty.item_def_id) != DefKind::ImplTraitPlaceholder => {
|
||||
(ty::Projection(proj_ty), _) if self.def_kind(proj_ty.def_id) != DefKind::ImplTraitPlaceholder => {
|
||||
self.expected_projection(
|
||||
diag,
|
||||
proj_ty,
|
||||
|
@ -562,7 +562,7 @@ impl<T> Trait<T> for X {
|
|||
cause.code(),
|
||||
);
|
||||
}
|
||||
(_, ty::Projection(proj_ty)) if self.def_kind(proj_ty.item_def_id) != DefKind::ImplTraitPlaceholder => {
|
||||
(_, ty::Projection(proj_ty)) if self.def_kind(proj_ty.def_id) != DefKind::ImplTraitPlaceholder => {
|
||||
let msg = format!(
|
||||
"consider constraining the associated type `{}` to `{}`",
|
||||
values.found, values.expected,
|
||||
|
@ -627,7 +627,7 @@ impl<T> Trait<T> for X {
|
|||
proj_ty: &ty::ProjectionTy<'tcx>,
|
||||
ty: Ty<'tcx>,
|
||||
) -> bool {
|
||||
let assoc = self.associated_item(proj_ty.item_def_id);
|
||||
let assoc = self.associated_item(proj_ty.def_id);
|
||||
let (trait_ref, assoc_substs) = proj_ty.trait_ref_and_own_substs(self);
|
||||
if let Some(item) = self.hir().get_if_local(body_owner_def_id) {
|
||||
if let Some(hir_generics) = item.generics() {
|
||||
|
@ -703,7 +703,7 @@ impl<T> Trait<T> for X {
|
|||
);
|
||||
let impl_comparison =
|
||||
matches!(cause_code, ObligationCauseCode::CompareImplItemObligation { .. });
|
||||
let assoc = self.associated_item(proj_ty.item_def_id);
|
||||
let assoc = self.associated_item(proj_ty.def_id);
|
||||
if !callable_scope || impl_comparison {
|
||||
// We do not want to suggest calling functions when the reason of the
|
||||
// type error is a comparison of an `impl` with its `trait` or when the
|
||||
|
@ -716,7 +716,7 @@ impl<T> Trait<T> for X {
|
|||
diag,
|
||||
assoc.container_id(self),
|
||||
current_method_ident,
|
||||
proj_ty.item_def_id,
|
||||
proj_ty.def_id,
|
||||
values.expected,
|
||||
);
|
||||
// Possibly suggest constraining the associated type to conform to the
|
||||
|
@ -778,7 +778,7 @@ fn foo(&self) -> Self::T { String::new() }
|
|||
proj_ty: &ty::ProjectionTy<'tcx>,
|
||||
ty: Ty<'tcx>,
|
||||
) -> bool {
|
||||
let assoc = self.associated_item(proj_ty.item_def_id);
|
||||
let assoc = self.associated_item(proj_ty.def_id);
|
||||
if let ty::Opaque(ty::OpaqueTy { def_id, substs: _ }) = *proj_ty.self_ty().kind() {
|
||||
let opaque_local_def_id = def_id.as_local();
|
||||
let opaque_hir_ty = if let Some(opaque_local_def_id) = opaque_local_def_id {
|
||||
|
@ -828,7 +828,7 @@ fn foo(&self) -> Self::T { String::new() }
|
|||
.filter_map(|(_, item)| {
|
||||
let method = self.fn_sig(item.def_id);
|
||||
match *method.output().skip_binder().kind() {
|
||||
ty::Projection(ty::ProjectionTy { item_def_id, .. })
|
||||
ty::Projection(ty::ProjectionTy { def_id: item_def_id, .. })
|
||||
if item_def_id == proj_ty_item_def_id =>
|
||||
{
|
||||
Some((
|
||||
|
|
|
@ -1046,7 +1046,7 @@ impl<'tcx> PolyProjectionPredicate<'tcx> {
|
|||
/// associated type, which is in `tcx.associated_item(projection_def_id()).container`.
|
||||
pub fn projection_def_id(&self) -> DefId {
|
||||
// Ok to skip binder since trait `DefId` does not care about regions.
|
||||
self.skip_binder().projection_ty.item_def_id
|
||||
self.skip_binder().projection_ty.def_id
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -720,9 +720,9 @@ pub trait PrettyPrinter<'tcx>:
|
|||
}
|
||||
ty::Projection(ref data) => {
|
||||
if !(self.should_print_verbose() || NO_QUERIES.with(|q| q.get()))
|
||||
&& self.tcx().def_kind(data.item_def_id) == DefKind::ImplTraitPlaceholder
|
||||
&& self.tcx().def_kind(data.def_id) == DefKind::ImplTraitPlaceholder
|
||||
{
|
||||
return self.pretty_print_opaque_impl_type(data.item_def_id, data.substs);
|
||||
return self.pretty_print_opaque_impl_type(data.def_id, data.substs);
|
||||
} else {
|
||||
p!(print(data))
|
||||
}
|
||||
|
@ -1022,7 +1022,7 @@ pub trait PrettyPrinter<'tcx>:
|
|||
// unless we can find out what generator return type it comes from.
|
||||
let term = if let Some(ty) = term.skip_binder().ty()
|
||||
&& let ty::Projection(proj) = ty.kind()
|
||||
&& let Some(assoc) = tcx.opt_associated_item(proj.item_def_id)
|
||||
&& let Some(assoc) = tcx.opt_associated_item(proj.def_id)
|
||||
&& assoc.trait_container(tcx) == tcx.lang_items().gen_trait()
|
||||
&& assoc.name == rustc_span::sym::Return
|
||||
{
|
||||
|
@ -2655,7 +2655,7 @@ define_print_and_forward_display! {
|
|||
}
|
||||
|
||||
ty::ExistentialProjection<'tcx> {
|
||||
let name = cx.tcx().associated_item(self.item_def_id).name;
|
||||
let name = cx.tcx().associated_item(self.def_id).name;
|
||||
p!(write("{} = ", name), print(self.term))
|
||||
}
|
||||
|
||||
|
@ -2743,7 +2743,7 @@ define_print_and_forward_display! {
|
|||
}
|
||||
|
||||
ty::ProjectionTy<'tcx> {
|
||||
p!(print_def_path(self.item_def_id, self.substs));
|
||||
p!(print_def_path(self.def_id, self.substs));
|
||||
}
|
||||
|
||||
ty::ClosureKind {
|
||||
|
|
|
@ -276,15 +276,11 @@ impl<'tcx> Relate<'tcx> for ty::ProjectionTy<'tcx> {
|
|||
a: ty::ProjectionTy<'tcx>,
|
||||
b: ty::ProjectionTy<'tcx>,
|
||||
) -> RelateResult<'tcx, ty::ProjectionTy<'tcx>> {
|
||||
if a.item_def_id != b.item_def_id {
|
||||
Err(TypeError::ProjectionMismatched(expected_found(
|
||||
relation,
|
||||
a.item_def_id,
|
||||
b.item_def_id,
|
||||
)))
|
||||
if a.def_id != b.def_id {
|
||||
Err(TypeError::ProjectionMismatched(expected_found(relation, a.def_id, b.def_id)))
|
||||
} else {
|
||||
let substs = relation.relate(a.substs, b.substs)?;
|
||||
Ok(ty::ProjectionTy { item_def_id: a.item_def_id, substs: &substs })
|
||||
Ok(ty::ProjectionTy { def_id: a.def_id, substs: &substs })
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -295,12 +291,8 @@ impl<'tcx> Relate<'tcx> for ty::ExistentialProjection<'tcx> {
|
|||
a: ty::ExistentialProjection<'tcx>,
|
||||
b: ty::ExistentialProjection<'tcx>,
|
||||
) -> RelateResult<'tcx, ty::ExistentialProjection<'tcx>> {
|
||||
if a.item_def_id != b.item_def_id {
|
||||
Err(TypeError::ProjectionMismatched(expected_found(
|
||||
relation,
|
||||
a.item_def_id,
|
||||
b.item_def_id,
|
||||
)))
|
||||
if a.def_id != b.def_id {
|
||||
Err(TypeError::ProjectionMismatched(expected_found(relation, a.def_id, b.def_id)))
|
||||
} else {
|
||||
let term = relation.relate_with_variance(
|
||||
ty::Invariant,
|
||||
|
@ -314,7 +306,7 @@ impl<'tcx> Relate<'tcx> for ty::ExistentialProjection<'tcx> {
|
|||
a.substs,
|
||||
b.substs,
|
||||
)?;
|
||||
Ok(ty::ExistentialProjection { item_def_id: a.item_def_id, substs, term })
|
||||
Ok(ty::ExistentialProjection { def_id: a.def_id, substs, term })
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -561,7 +553,7 @@ pub fn super_relate_tys<'tcx, R: TypeRelation<'tcx>>(
|
|||
// these two are already handled downstream in case of lazy normalization
|
||||
(&ty::Projection(a_data), &ty::Projection(b_data)) => {
|
||||
let projection_ty = relation.relate(a_data, b_data)?;
|
||||
Ok(tcx.mk_projection(projection_ty.item_def_id, projection_ty.substs))
|
||||
Ok(tcx.mk_projection(projection_ty.def_id, projection_ty.substs))
|
||||
}
|
||||
|
||||
(
|
||||
|
|
|
@ -693,7 +693,7 @@ impl<'tcx> ExistentialPredicate<'tcx> {
|
|||
match (*self, *other) {
|
||||
(Trait(_), Trait(_)) => Ordering::Equal,
|
||||
(Projection(ref a), Projection(ref b)) => {
|
||||
tcx.def_path_hash(a.item_def_id).cmp(&tcx.def_path_hash(b.item_def_id))
|
||||
tcx.def_path_hash(a.def_id).cmp(&tcx.def_path_hash(b.def_id))
|
||||
}
|
||||
(AutoTrait(ref a), AutoTrait(ref b)) => {
|
||||
tcx.def_path_hash(*a).cmp(&tcx.def_path_hash(*b))
|
||||
|
@ -1152,15 +1152,15 @@ pub struct ProjectionTy<'tcx> {
|
|||
/// Note that this is not the `DefId` of the `TraitRef` containing this
|
||||
/// associated type, which is in `tcx.associated_item(item_def_id).container`,
|
||||
/// aka. `tcx.parent(item_def_id).unwrap()`.
|
||||
pub item_def_id: DefId,
|
||||
pub def_id: DefId,
|
||||
}
|
||||
|
||||
impl<'tcx> ProjectionTy<'tcx> {
|
||||
pub fn trait_def_id(&self, tcx: TyCtxt<'tcx>) -> DefId {
|
||||
match tcx.def_kind(self.item_def_id) {
|
||||
DefKind::AssocTy | DefKind::AssocConst => tcx.parent(self.item_def_id),
|
||||
match tcx.def_kind(self.def_id) {
|
||||
DefKind::AssocTy | DefKind::AssocConst => tcx.parent(self.def_id),
|
||||
DefKind::ImplTraitPlaceholder => {
|
||||
tcx.parent(tcx.impl_trait_in_trait_parent(self.item_def_id))
|
||||
tcx.parent(tcx.impl_trait_in_trait_parent(self.def_id))
|
||||
}
|
||||
kind => bug!("unexpected DefKind in ProjectionTy: {kind:?}"),
|
||||
}
|
||||
|
@ -1173,7 +1173,7 @@ impl<'tcx> ProjectionTy<'tcx> {
|
|||
&self,
|
||||
tcx: TyCtxt<'tcx>,
|
||||
) -> (ty::TraitRef<'tcx>, &'tcx [ty::GenericArg<'tcx>]) {
|
||||
let def_id = tcx.parent(self.item_def_id);
|
||||
let def_id = tcx.parent(self.def_id);
|
||||
assert_eq!(tcx.def_kind(def_id), DefKind::Trait);
|
||||
let trait_generics = tcx.generics_of(def_id);
|
||||
(
|
||||
|
@ -1415,7 +1415,7 @@ impl From<BoundVar> for BoundTy {
|
|||
#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Debug, TyEncodable, TyDecodable)]
|
||||
#[derive(HashStable, TypeFoldable, TypeVisitable, Lift)]
|
||||
pub struct ExistentialProjection<'tcx> {
|
||||
pub item_def_id: DefId,
|
||||
pub def_id: DefId,
|
||||
pub substs: SubstsRef<'tcx>,
|
||||
pub term: Term<'tcx>,
|
||||
}
|
||||
|
@ -1428,7 +1428,7 @@ impl<'tcx> ExistentialProjection<'tcx> {
|
|||
/// then this function would return an `exists T. T: Iterator` existential trait
|
||||
/// reference.
|
||||
pub fn trait_ref(&self, tcx: TyCtxt<'tcx>) -> ty::ExistentialTraitRef<'tcx> {
|
||||
let def_id = tcx.parent(self.item_def_id);
|
||||
let def_id = tcx.parent(self.def_id);
|
||||
let subst_count = tcx.generics_of(def_id).count() - 1;
|
||||
let substs = tcx.intern_substs(&self.substs[..subst_count]);
|
||||
ty::ExistentialTraitRef { def_id, substs }
|
||||
|
@ -1444,7 +1444,7 @@ impl<'tcx> ExistentialProjection<'tcx> {
|
|||
|
||||
ty::ProjectionPredicate {
|
||||
projection_ty: ty::ProjectionTy {
|
||||
item_def_id: self.item_def_id,
|
||||
def_id: self.def_id,
|
||||
substs: tcx.mk_substs_trait(self_ty, self.substs),
|
||||
},
|
||||
term: self.term,
|
||||
|
@ -1459,7 +1459,7 @@ impl<'tcx> ExistentialProjection<'tcx> {
|
|||
projection_predicate.projection_ty.substs.type_at(0);
|
||||
|
||||
Self {
|
||||
item_def_id: projection_predicate.projection_ty.item_def_id,
|
||||
def_id: projection_predicate.projection_ty.def_id,
|
||||
substs: tcx.intern_substs(&projection_predicate.projection_ty.substs[1..]),
|
||||
term: projection_predicate.term,
|
||||
}
|
||||
|
@ -1476,7 +1476,7 @@ impl<'tcx> PolyExistentialProjection<'tcx> {
|
|||
}
|
||||
|
||||
pub fn item_def_id(&self) -> DefId {
|
||||
self.skip_binder().item_def_id
|
||||
self.skip_binder().def_id
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue