Make find_local iterate instead of recurse
This commit is contained in:
parent
27cc0db7a2
commit
2e39b9c51f
@ -91,16 +91,19 @@ struct BorrowedLocalsVisitor<'b, 'c: 'b> {
|
||||
}
|
||||
|
||||
fn find_local<'tcx>(place: &Place<'tcx>) -> Option<Local> {
|
||||
match *place {
|
||||
Place::Base(PlaceBase::Local(l)) => Some(l),
|
||||
Place::Base(PlaceBase::Static(..)) => None,
|
||||
Place::Projection(ref proj) => {
|
||||
match proj.elem {
|
||||
ProjectionElem::Deref => None,
|
||||
_ => find_local(&proj.base)
|
||||
place.iterate(|place_base, place_projection| {
|
||||
for proj in place_projection {
|
||||
if proj.elem == ProjectionElem::Deref {
|
||||
return None;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if let PlaceBase::Local(local) = place_base {
|
||||
Some(*local)
|
||||
} else {
|
||||
None
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
impl<'tcx, 'b, 'c> Visitor<'tcx> for BorrowedLocalsVisitor<'b, 'c> {
|
||||
|
Loading…
x
Reference in New Issue
Block a user