yeet ImplSource::TraitAlias too
This commit is contained in:
parent
db235a07f7
commit
42571c4847
5 changed files with 8 additions and 45 deletions
|
@ -660,9 +660,6 @@ pub enum ImplSource<'tcx, N> {
|
||||||
|
|
||||||
/// ImplSource for trait upcasting coercion
|
/// ImplSource for trait upcasting coercion
|
||||||
TraitUpcasting(ImplSourceTraitUpcastingData<N>),
|
TraitUpcasting(ImplSourceTraitUpcastingData<N>),
|
||||||
|
|
||||||
/// ImplSource for a trait alias.
|
|
||||||
TraitAlias(ImplSourceTraitAliasData<'tcx, N>),
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'tcx, N> ImplSource<'tcx, N> {
|
impl<'tcx, N> ImplSource<'tcx, N> {
|
||||||
|
@ -671,7 +668,6 @@ impl<'tcx, N> ImplSource<'tcx, N> {
|
||||||
ImplSource::UserDefined(i) => i.nested,
|
ImplSource::UserDefined(i) => i.nested,
|
||||||
ImplSource::Param(n, _) | ImplSource::Builtin(n) => n,
|
ImplSource::Param(n, _) | ImplSource::Builtin(n) => n,
|
||||||
ImplSource::Object(d) => d.nested,
|
ImplSource::Object(d) => d.nested,
|
||||||
ImplSource::TraitAlias(d) => d.nested,
|
|
||||||
ImplSource::TraitUpcasting(d) => d.nested,
|
ImplSource::TraitUpcasting(d) => d.nested,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -681,7 +677,6 @@ impl<'tcx, N> ImplSource<'tcx, N> {
|
||||||
ImplSource::UserDefined(i) => &i.nested,
|
ImplSource::UserDefined(i) => &i.nested,
|
||||||
ImplSource::Param(n, _) | ImplSource::Builtin(n) => &n,
|
ImplSource::Param(n, _) | ImplSource::Builtin(n) => &n,
|
||||||
ImplSource::Object(d) => &d.nested,
|
ImplSource::Object(d) => &d.nested,
|
||||||
ImplSource::TraitAlias(d) => &d.nested,
|
|
||||||
ImplSource::TraitUpcasting(d) => &d.nested,
|
ImplSource::TraitUpcasting(d) => &d.nested,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -691,7 +686,6 @@ impl<'tcx, N> ImplSource<'tcx, N> {
|
||||||
ImplSource::UserDefined(i) => &mut i.nested,
|
ImplSource::UserDefined(i) => &mut i.nested,
|
||||||
ImplSource::Param(n, _) | ImplSource::Builtin(n) => n,
|
ImplSource::Param(n, _) | ImplSource::Builtin(n) => n,
|
||||||
ImplSource::Object(d) => &mut d.nested,
|
ImplSource::Object(d) => &mut d.nested,
|
||||||
ImplSource::TraitAlias(d) => &mut d.nested,
|
|
||||||
ImplSource::TraitUpcasting(d) => &mut d.nested,
|
ImplSource::TraitUpcasting(d) => &mut d.nested,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -713,11 +707,6 @@ impl<'tcx, N> ImplSource<'tcx, N> {
|
||||||
vtable_base: o.vtable_base,
|
vtable_base: o.vtable_base,
|
||||||
nested: o.nested.into_iter().map(f).collect(),
|
nested: o.nested.into_iter().map(f).collect(),
|
||||||
}),
|
}),
|
||||||
ImplSource::TraitAlias(d) => ImplSource::TraitAlias(ImplSourceTraitAliasData {
|
|
||||||
alias_def_id: d.alias_def_id,
|
|
||||||
substs: d.substs,
|
|
||||||
nested: d.nested.into_iter().map(f).collect(),
|
|
||||||
}),
|
|
||||||
ImplSource::TraitUpcasting(d) => {
|
ImplSource::TraitUpcasting(d) => {
|
||||||
ImplSource::TraitUpcasting(ImplSourceTraitUpcastingData {
|
ImplSource::TraitUpcasting(ImplSourceTraitUpcastingData {
|
||||||
vtable_vptr_slot: d.vtable_vptr_slot,
|
vtable_vptr_slot: d.vtable_vptr_slot,
|
||||||
|
@ -773,14 +762,6 @@ pub struct ImplSourceObjectData<N> {
|
||||||
pub nested: Vec<N>,
|
pub nested: Vec<N>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone, PartialEq, Eq, TyEncodable, TyDecodable, HashStable, Lift)]
|
|
||||||
#[derive(TypeFoldable, TypeVisitable)]
|
|
||||||
pub struct ImplSourceTraitAliasData<'tcx, N> {
|
|
||||||
pub alias_def_id: DefId,
|
|
||||||
pub substs: SubstsRef<'tcx>,
|
|
||||||
pub nested: Vec<N>,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Clone, Debug, PartialEq, Eq, Hash, HashStable, PartialOrd, Ord)]
|
#[derive(Clone, Debug, PartialEq, Eq, Hash, HashStable, PartialOrd, Ord)]
|
||||||
pub enum ObjectSafetyViolation {
|
pub enum ObjectSafetyViolation {
|
||||||
/// `Self: Sized` declared on the trait.
|
/// `Self: Sized` declared on the trait.
|
||||||
|
|
|
@ -17,8 +17,6 @@ impl<'tcx, N: fmt::Debug> fmt::Debug for traits::ImplSource<'tcx, N> {
|
||||||
write!(f, "ImplSourceParamData({:?}, {:?})", n, ct)
|
write!(f, "ImplSourceParamData({:?}, {:?})", n, ct)
|
||||||
}
|
}
|
||||||
|
|
||||||
super::ImplSource::TraitAlias(ref d) => write!(f, "{:?}", d),
|
|
||||||
|
|
||||||
super::ImplSource::TraitUpcasting(ref d) => write!(f, "{:?}", d),
|
super::ImplSource::TraitUpcasting(ref d) => write!(f, "{:?}", d),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -53,13 +51,3 @@ impl<N: fmt::Debug> fmt::Debug for traits::ImplSourceObjectData<N> {
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'tcx, N: fmt::Debug> fmt::Debug for traits::ImplSourceTraitAliasData<'tcx, N> {
|
|
||||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
|
||||||
write!(
|
|
||||||
f,
|
|
||||||
"ImplSourceTraitAliasData(alias_def_id={:?}, substs={:?}, nested={:?})",
|
|
||||||
self.alias_def_id, self.substs, self.nested
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -1721,7 +1721,6 @@ fn assemble_candidates_from_impls<'cx, 'tcx>(
|
||||||
};
|
};
|
||||||
|
|
||||||
let eligible = match &impl_source {
|
let eligible = match &impl_source {
|
||||||
super::ImplSource::TraitAlias(_) => true,
|
|
||||||
super::ImplSource::UserDefined(impl_data) => {
|
super::ImplSource::UserDefined(impl_data) => {
|
||||||
// We have to be careful when projecting out of an
|
// We have to be careful when projecting out of an
|
||||||
// impl because of specialization. If we are not in
|
// impl because of specialization. If we are not in
|
||||||
|
@ -2013,8 +2012,7 @@ fn confirm_select_candidate<'cx, 'tcx>(
|
||||||
}
|
}
|
||||||
super::ImplSource::Object(_)
|
super::ImplSource::Object(_)
|
||||||
| super::ImplSource::Param(..)
|
| super::ImplSource::Param(..)
|
||||||
| super::ImplSource::TraitUpcasting(_)
|
| super::ImplSource::TraitUpcasting(_) => {
|
||||||
| super::ImplSource::TraitAlias(..) => {
|
|
||||||
// we don't create Select candidates with this kind of resolution
|
// we don't create Select candidates with this kind of resolution
|
||||||
span_bug!(
|
span_bug!(
|
||||||
obligation.cause.span,
|
obligation.cause.span,
|
||||||
|
|
|
@ -27,10 +27,9 @@ use crate::traits::vtable::{
|
||||||
};
|
};
|
||||||
use crate::traits::{
|
use crate::traits::{
|
||||||
BuiltinDerivedObligation, ImplDerivedObligation, ImplDerivedObligationCause, ImplSource,
|
BuiltinDerivedObligation, ImplDerivedObligation, ImplDerivedObligationCause, ImplSource,
|
||||||
ImplSourceObjectData, ImplSourceTraitAliasData, ImplSourceTraitUpcastingData,
|
ImplSourceObjectData, ImplSourceTraitUpcastingData, ImplSourceUserDefinedData, Normalized,
|
||||||
ImplSourceUserDefinedData, Normalized, Obligation, ObligationCause,
|
Obligation, ObligationCause, OutputTypeParameterMismatch, PredicateObligation, Selection,
|
||||||
OutputTypeParameterMismatch, PredicateObligation, Selection, SelectionError,
|
SelectionError, TraitNotObjectSafe, TraitObligation, Unimplemented,
|
||||||
TraitNotObjectSafe, TraitObligation, Unimplemented,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
use super::BuiltinImplConditions;
|
use super::BuiltinImplConditions;
|
||||||
|
@ -105,7 +104,7 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> {
|
||||||
|
|
||||||
TraitAliasCandidate => {
|
TraitAliasCandidate => {
|
||||||
let data = self.confirm_trait_alias_candidate(obligation);
|
let data = self.confirm_trait_alias_candidate(obligation);
|
||||||
ImplSource::TraitAlias(data)
|
ImplSource::Builtin(data)
|
||||||
}
|
}
|
||||||
|
|
||||||
BuiltinObjectCandidate => {
|
BuiltinObjectCandidate => {
|
||||||
|
@ -721,10 +720,9 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> {
|
||||||
fn confirm_trait_alias_candidate(
|
fn confirm_trait_alias_candidate(
|
||||||
&mut self,
|
&mut self,
|
||||||
obligation: &TraitObligation<'tcx>,
|
obligation: &TraitObligation<'tcx>,
|
||||||
) -> ImplSourceTraitAliasData<'tcx, PredicateObligation<'tcx>> {
|
) -> Vec<PredicateObligation<'tcx>> {
|
||||||
debug!(?obligation, "confirm_trait_alias_candidate");
|
debug!(?obligation, "confirm_trait_alias_candidate");
|
||||||
|
|
||||||
let alias_def_id = obligation.predicate.def_id();
|
|
||||||
let predicate = self.infcx.instantiate_binder_with_placeholders(obligation.predicate);
|
let predicate = self.infcx.instantiate_binder_with_placeholders(obligation.predicate);
|
||||||
let trait_ref = predicate.trait_ref;
|
let trait_ref = predicate.trait_ref;
|
||||||
let trait_def_id = trait_ref.def_id;
|
let trait_def_id = trait_ref.def_id;
|
||||||
|
@ -741,7 +739,7 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> {
|
||||||
|
|
||||||
debug!(?trait_def_id, ?trait_obligations, "trait alias obligations");
|
debug!(?trait_def_id, ?trait_obligations, "trait alias obligations");
|
||||||
|
|
||||||
ImplSourceTraitAliasData { alias_def_id, substs, nested: trait_obligations }
|
trait_obligations
|
||||||
}
|
}
|
||||||
|
|
||||||
fn confirm_generator_candidate(
|
fn confirm_generator_candidate(
|
||||||
|
|
|
@ -293,9 +293,7 @@ fn resolve_associated_item<'tcx>(
|
||||||
None
|
None
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
traits::ImplSource::Param(..)
|
traits::ImplSource::Param(..) | traits::ImplSource::TraitUpcasting(_) => None,
|
||||||
| traits::ImplSource::TraitAlias(..)
|
|
||||||
| traits::ImplSource::TraitUpcasting(_) => None,
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue