diff options
| author | Santiago Pastorino <spastorino@gmail.com> | 2019-06-18 22:06:00 +0200 |
|---|---|---|
| committer | Santiago Pastorino <spastorino@gmail.com> | 2019-06-18 22:06:00 +0200 |
| commit | f4737d5607eabbfc07440b0ce64b852395948a68 (patch) | |
| tree | 59fc2c68678831f85e0b1dbe40ba1645d959bd85 | |
| parent | 44fb88d25282d9362774536965f2455f677734f3 (diff) | |
| download | rust-f4737d5607eabbfc07440b0ce64b852395948a68.tar.gz rust-f4737d5607eabbfc07440b0ce64b852395948a68.zip | |
Make Place::ty iterate
| -rw-r--r-- | src/librustc/mir/tcx.rs | 26 |
1 files changed, 19 insertions, 7 deletions
diff --git a/src/librustc/mir/tcx.rs b/src/librustc/mir/tcx.rs index afabcdfadd0..2079a2a34e7 100644 --- a/src/librustc/mir/tcx.rs +++ b/src/librustc/mir/tcx.rs @@ -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), } } } |
