Skip to content

Commit

Permalink
Make visit_place traverse place and have visit_place_base and visit_p…
Browse files Browse the repository at this point in the history
…rojection doing the real work
  • Loading branch information
spastorino committed Jun 6, 2019
1 parent 47f4975 commit cc52746
Showing 1 changed file with 31 additions and 27 deletions.
58 changes: 31 additions & 27 deletions src/librustc/mir/visit.rs
Expand Up @@ -151,17 +151,17 @@ macro_rules! make_mir_visitor {
self.super_place(place, context, location);
}

fn visit_projection(&mut self,
place: & $($mutability)? Projection<'tcx>,
fn visit_place_base(&mut self,
place_base: & $($mutability)? PlaceBase<'tcx>,
context: PlaceContext,
location: Location) {
self.super_projection(place, context, location);
self.super_place_base(place_base, context, location);
}

fn visit_projection_elem(&mut self,
place: & $($mutability)? PlaceElem<'tcx>,
location: Location) {
self.super_projection_elem(place, location);
fn visit_projection(&mut self,
place: & $($mutability)? Projection<'tcx>,
location: Location) {
self.super_projection(place, location);
}

fn visit_constant(&mut self,
Expand Down Expand Up @@ -676,36 +676,40 @@ macro_rules! make_mir_visitor {
context: PlaceContext,
location: Location) {
match place {
Place::Base(PlaceBase::Local(local)) => {
self.visit_local(local, context, location);
}
Place::Base(PlaceBase::Static(box Static { kind: _, ty })) => {
self.visit_ty(& $($mutability)? *ty, TyContext::Location(location));
Place::Base(place_base) => {
self.visit_place_base(place_base, context, location);
}
Place::Projection(proj) => {
self.visit_projection(proj, context, location);
let context = if context.is_mutating_use() {
PlaceContext::MutatingUse(MutatingUseContext::Projection)
} else {
PlaceContext::NonMutatingUse(NonMutatingUseContext::Projection)
};

self.visit_place(& $($mutability)? proj.base, context, location);
self.visit_projection(proj, location);
}
}
}

fn super_projection(&mut self,
proj: & $($mutability)? Projection<'tcx>,
fn super_place_base(&mut self,
place_base: & $($mutability)? PlaceBase<'tcx>,
context: PlaceContext,
location: Location) {
let Projection { base, elem } = proj;
let context = if context.is_mutating_use() {
PlaceContext::MutatingUse(MutatingUseContext::Projection)
} else {
PlaceContext::NonMutatingUse(NonMutatingUseContext::Projection)
};
self.visit_place(base, context, location);
self.visit_projection_elem(elem, location);
match place_base {
PlaceBase::Local(local) => {
self.visit_local(local, context, location);
}
PlaceBase::Static(box Static { kind: _, ty }) => {
self.visit_ty(& $($mutability)? *ty, TyContext::Location(location));
}
}
}

fn super_projection_elem(&mut self,
proj: & $($mutability)? PlaceElem<'tcx>,
location: Location) {
match proj {
fn super_projection(&mut self,
proj: & $($mutability)? Projection<'tcx>,
location: Location) {
match & $($mutability)? proj.elem {
ProjectionElem::Deref => {
}
ProjectionElem::Subslice { from: _, to: _ } => {
Expand Down

0 comments on commit cc52746

Please sign in to comment.