Skip to content

Commit

Permalink
Make Place::ty iterate
Browse files Browse the repository at this point in the history
  • Loading branch information
spastorino committed Jun 18, 2019
1 parent 44fb88d commit f4737d5
Showing 1 changed file with 19 additions and 7 deletions.
26 changes: 19 additions & 7 deletions src/librustc/mir/tcx.rs
Original file line number Diff line number Diff line change
Expand Up @@ -122,13 +122,25 @@ impl<'tcx> Place<'tcx> {
where
D: HasLocalDecls<'tcx>,
{
match *self {
Place::Base(PlaceBase::Local(index)) =>
PlaceTy::from_ty(local_decls.local_decls()[index].ty),
Place::Base(PlaceBase::Static(ref data)) =>
PlaceTy::from_ty(data.ty),
Place::Projection(ref proj) =>
proj.base.ty(local_decls, tcx).projection_ty(tcx, &proj.elem),
self.iterate(|place_base, place_projections| {
let mut place_ty = place_base.ty(local_decls);

for proj in place_projections {
place_ty = place_ty.projection_ty(tcx, &proj.elem);
}

place_ty
})
}
}

impl<'tcx> PlaceBase<'tcx> {
pub fn ty<D>(&self, local_decls: &D) -> PlaceTy<'tcx>
where D: HasLocalDecls<'tcx>
{
match self {
PlaceBase::Local(index) => PlaceTy::from_ty(local_decls.local_decls()[*index].ty),
PlaceBase::Static(data) => PlaceTy::from_ty(data.ty),
}
}
}
Expand Down

0 comments on commit f4737d5

Please sign in to comment.