[FIR] Fix infinite CFG traverse
This commit is contained in:
committed by
Dmitriy Novozhilov
parent
7644b4baec
commit
a55dec28b9
@@ -31,6 +31,7 @@ fun <D> ControlFlowGraph.traverse(
|
|||||||
stack.addFirst(initialNode)
|
stack.addFirst(initialNode)
|
||||||
while (stack.isNotEmpty()) {
|
while (stack.isNotEmpty()) {
|
||||||
val node = stack.removeFirst()
|
val node = stack.removeFirst()
|
||||||
|
visitedNodes.add(node)
|
||||||
val previousNodes = when (direction) {
|
val previousNodes = when (direction) {
|
||||||
TraverseDirection.Forward -> node.previousNodes
|
TraverseDirection.Forward -> node.previousNodes
|
||||||
TraverseDirection.Backward -> node.followingNodes
|
TraverseDirection.Backward -> node.followingNodes
|
||||||
@@ -49,9 +50,7 @@ fun <D> ControlFlowGraph.traverse(
|
|||||||
TraverseDirection.Backward -> node.previousNodes
|
TraverseDirection.Backward -> node.previousNodes
|
||||||
}
|
}
|
||||||
|
|
||||||
followingNodes.forEach {
|
followingNodes.filterNot { visitedNodes.contains(it) }.forEach { stack.addFirst(it) }
|
||||||
stack.addFirst(it)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user