}
impl<'a, 'gcx, 'tcx> Generics {
- pub fn own_count(&self) -> usize {
- self.params.len()
- }
-
pub fn count(&self) -> usize {
- self.parent_count + self.own_count()
+ self.parent_count + self.params.len()
}
pub fn lifetimes(&self) -> impl DoubleEndedIterator<Item = &RegionParameterDef> {
}
for def in &defs.params {
+ assert_eq!(def.index() as usize, substs.len());
let param = match def {
ty::GenericParam::Lifetime(ref lt) => {
- UnpackedKind::Lifetime(mk_region(lt, substs))
+ mk_region(lt, substs).into()
}
ty::GenericParam::Type(ref ty) => {
if skip_self {
skip_self = false;
continue
}
- UnpackedKind::Type(mk_type(ty, substs))
+ mk_type(ty, substs).into()
}
};
- assert_eq!(def.index() as usize, substs.len());
- substs.push(param.pack());
+ substs.push(param);
}
}
target_substs: &Substs<'tcx>)
-> &'tcx Substs<'tcx> {
let defs = tcx.generics_of(source_ancestor);
- tcx.mk_substs(target_substs.iter().chain(&self[defs.own_count()..]).cloned())
+ tcx.mk_substs(target_substs.iter().chain(&self[defs.params.len()..]).cloned())
}
pub fn truncate_to(&self, tcx: TyCtxt<'a, 'gcx, 'tcx>, generics: &ty::Generics)
ty::TraitRef {
def_id: trait_id,
- substs: tcx.intern_substs(&substs[..defs.own_count()])
+ substs: tcx.intern_substs(&substs[..defs.params.len()])
}
}
}
assert_eq!(substs.len(), generics.parent_count);
// Fill in our own generics with the resolved lifetimes
- assert_eq!(lifetimes.len(), generics.own_count());
+ assert_eq!(lifetimes.len(), generics.params.len());
substs.extend(lifetimes.iter().map(|lt| Kind::from(self.ast_region_to_region(lt, None))));
debug!("impl_trait_ty_to_ty: final substs = {:?}", substs);
(generics.parent_count, generics.has_self)
}
(Some((_, generics)), None) => {
- (generics.own_count(), generics.has_self)
+ (generics.params.len(), generics.has_self)
}
(None, None) => (0, false)
};
.collect();
let lifetimes: Vec<ty::GenericParam> =
- regions.into_iter().map(|lt| ty::GenericParam::Lifetime(lt)).collect();
+ regions.into_iter().map(|lt| ty::GenericParam::Lifetime(lt));
let types: Vec<ty::GenericParam> =
- types.into_iter().map(|ty| ty::GenericParam::Type(ty)).collect();
- let params = lifetimes.into_iter().chain(types.into_iter()).collect();
+ types.into_iter().map(|ty| ty::GenericParam::Type(ty));
+ let params = lifetimes.chain(types).collect();
tcx.alloc_generics(ty::Generics {
parent: parent_def_id,