diff --git a/deob/src/main/java/dev/openrs2/deob/analysis/DataFlowAnalyzer.kt b/deob/src/main/java/dev/openrs2/deob/analysis/DataFlowAnalyzer.kt index 917c20e0..7ff70e0f 100644 --- a/deob/src/main/java/dev/openrs2/deob/analysis/DataFlowAnalyzer.kt +++ b/deob/src/main/java/dev/openrs2/deob/analysis/DataFlowAnalyzer.kt @@ -42,18 +42,20 @@ abstract class DataFlowAnalyzer(owner: String, private val method: MethodNode } fun analyze() { - for (node in graph.vertexSet()) { - outSets[node] = createInitialSet() - } + val initialSet = createInitialSet() + + val workList = LinkedHashSet() + workList += graph.vertexSet().filter { vertex -> graph.inDegreeOf(vertex) == 0 } - val workList = LinkedHashSet(graph.vertexSet()) while (true) { val node = workList.removeFirstOrNull() ?: break - val predecessors = graph.incomingEdgesOf(node).map { edge -> outSets[graph.getEdgeSource(edge)]!! } + val predecessors = graph.incomingEdgesOf(node).map { edge -> + outSets[graph.getEdgeSource(edge)] ?: initialSet + } val inSet = if (predecessors.isEmpty()) { - createInitialSet() + initialSet } else { predecessors.reduce(this::join) }