pub struct ImplInfo {
pub trait_id: Option<DefId>,
pub self_head: TyHead,
pub self_ty: Ty,
pub generics: u32,
pub bounds: Vec<Vec<DefId>>,
pub methods: Vec<(String, DefId)>,
pub assoc_bindings: Vec<(DefId, Ty)>,
}Expand description
One impl block: an inherent impl (trait_id: None) or a trait impl.
Fields§
§trait_id: Option<DefId>§self_head: TyHeadThe nominal head of the self type — the impl-table lookup key.
self_ty: TyThe impl’s self type, with Param(k) standing for the impl’s k-th
generic parameter (e.g. Box<Param(0)> for impl<T> … for Box<T>).
A non-generic impl’s self type contains no Param.
generics: u32Number of generic parameters the impl introduces.
bounds: Vec<Vec<DefId>>Trait bounds on each impl generic parameter (impl<T: Bound>), indexed
by parameter position — empty for an unconstrained or non-generic impl.
methods: Vec<(String, DefId)>(method name, compiled method function DefId) for methods this
impl defines directly.
assoc_bindings: Vec<(DefId, Ty)>Associated types this impl binds, keyed by the associated type’s own
DefId (DefKind::AssocType, the same id TraitDef::assoc_types
carries). The bound type may contain the impl’s Param(k), so
normalization must substitute the impl’s arguments before using it.
Empty for an inherent impl: only a trait declares associated types, so only a trait impl can bind one.
Implementations§
Source§impl ImplInfo
impl ImplInfo
Sourcepub fn match_args(&self, concrete: &Ty) -> Option<Vec<Ty>>
pub fn match_args(&self, concrete: &Ty) -> Option<Vec<Ty>>
Recover this impl’s type arguments (in Param order) from a concrete
self type. Returns None when the self type does not actually match the
impl’s self-type pattern — sharing a head is not enough, so an impl with
a repeated (Pair<T, T>) or partially-concrete (Pair<Int, T>) self
type only applies to receivers that genuinely fit it. A parameter the
pattern does not mention resolves to Ty::Error (an unconstrained,
unused impl generic, which never reaches code).