(&mut self)
| 289 | type Item = Node; |
| 290 | |
| 291 | fn next(&mut self) -> Option<Self::Item> { |
| 292 | match self.node { |
| 293 | ExtNode::Real(Some(node)) => { |
| 294 | match self.post_dominators.immediate_post_dominator(node) { |
| 295 | ExtNode::Real(Some(dom)) => { |
| 296 | if dom == node { |
| 297 | self.node = ExtNode::Real(None); // reached the root |
| 298 | } else { |
| 299 | self.node = ExtNode::Real(Some(dom)); |
| 300 | } |
| 301 | Some(node) |
| 302 | } |
| 303 | ExtNode::Real(None) => { |
| 304 | // panic!("post_dominators have uncomputed nodes"); |
| 305 | None |
| 306 | } |
| 307 | ExtNode::Fake => { |
| 308 | self.node = ExtNode::Fake; |
| 309 | Some(node) |
| 310 | } |
| 311 | } |
| 312 | } |
| 313 | ExtNode::Real(None) => None, |
| 314 | ExtNode::Fake => None, |
| 315 | } |
| 316 | } |
| 317 | } |
no test coverage detected