/// Recursively "iterates" over place components, generating a `PlaceComponents` list,
/// invoking `op` with a `PlaceComponentsIter`.
pub fn iterate<R>(
+ &self,
+ op: impl FnOnce(PlaceComponentsIter<'_, 'tcx>) -> R,
+ ) -> R {
+ self.iterate2(None, op)
+ }
+
+ fn iterate2<R>(
&self,
next: Option<&PlaceComponents<'_, 'tcx>>,
op: impl FnOnce(PlaceComponentsIter<'_, 'tcx>) -> R,
) -> R {
match self {
- Place::Projection(interior) => interior.base.iterate(
+ Place::Projection(interior) => interior.base.iterate2(
Some(&PlaceComponents {
component: self,
next,
}
}
- borrow_place.iterate(None, |borrow_components| {
- access_place.iterate(None, |access_components| {
+ borrow_place.iterate(|borrow_components| {
+ access_place.iterate(|access_components| {
place_components_conflict(
tcx,
mir,