use generic arguments of associated item in trait_ref method
This commit is contained in:
parent
da2cf9b9d1
commit
6a68966663
1 changed files with 9 additions and 1 deletions
|
@ -1132,8 +1132,16 @@ impl<'tcx> ProjectionTy<'tcx> {
|
||||||
/// For example, if this is a projection of `<T as Iterator>::Item`,
|
/// For example, if this is a projection of `<T as Iterator>::Item`,
|
||||||
/// then this function would return a `T: Iterator` trait reference.
|
/// then this function would return a `T: Iterator` trait reference.
|
||||||
pub fn trait_ref(&self, tcx: TyCtxt<'tcx>) -> ty::TraitRef<'tcx> {
|
pub fn trait_ref(&self, tcx: TyCtxt<'tcx>) -> ty::TraitRef<'tcx> {
|
||||||
|
// FIXME: This method probably shouldn't exist at all, since it's not
|
||||||
|
// clear what this method really intends to do. Be careful when
|
||||||
|
// using this method since the resulting TraitRef additionally
|
||||||
|
// contains the substs for the assoc_item, which strictly speaking
|
||||||
|
// is not correct
|
||||||
let def_id = tcx.associated_item(self.item_def_id).container.id();
|
let def_id = tcx.associated_item(self.item_def_id).container.id();
|
||||||
ty::TraitRef { def_id, substs: self.substs.truncate_to(tcx, tcx.generics_of(def_id)) }
|
// Include substitutions for generic arguments of associated types
|
||||||
|
let assoc_item = tcx.associated_item(self.item_def_id);
|
||||||
|
let substs_assoc_item = self.substs.truncate_to(tcx, tcx.generics_of(assoc_item.def_id));
|
||||||
|
ty::TraitRef { def_id, substs: substs_assoc_item }
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn self_ty(&self) -> Ty<'tcx> {
|
pub fn self_ty(&self) -> Ty<'tcx> {
|
||||||
|
|
Loading…
Reference in a new issue