Package com.strobel.decompiler.ast
Class LoopsAndConditions
- java.lang.Object
-
- com.strobel.decompiler.ast.LoopsAndConditions
-
final class LoopsAndConditions extends java.lang.Object
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private static classLoopsAndConditions.LoopExitInfo
-
Field Summary
Fields Modifier and Type Field Description private int_nextLabelIndexprivate DecompilerContextcontextprivate java.util.Map<Label,ControlFlowNode>labelsToNodes
-
Constructor Summary
Constructors Constructor Description LoopsAndConditions(DecompilerContext context)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description private ControlFlowGraphbuildGraph(java.util.List<Node> nodes, Label entryLabel)private booleancanBeSelfContainedLoop(BasicBlock node, Expression branch, Label target)private intcountJumps(java.util.Set<ControlFlowNode> nodes, Label target, Expression ignore)voidfindConditions(Block block)private java.util.List<Node>findConditions(java.util.Set<ControlFlowNode> scopeNodes, ControlFlowNode entryNode)private static java.util.Set<ControlFlowNode>findDominatedNodes(java.util.Set<ControlFlowNode> scope, ControlFlowNode head)private static java.util.Set<ControlFlowNode>findLoopContents(java.util.Set<ControlFlowNode> scope, ControlFlowNode head)private LoopsAndConditions.LoopExitInfofindLoopExitInfo(java.util.Set<ControlFlowNode> contents)voidfindLoops(Block block)private java.util.List<Node>findLoops(java.util.Set<ControlFlowNode> scopeNodes, ControlFlowNode entryPoint, boolean excludeEntryPoint)private static booleanhasSingleEdgeEnteringBlock(ControlFlowNode node)private voidreorderCaseBlocks(Switch switchNode)
-
-
-
Field Detail
-
labelsToNodes
private final java.util.Map<Label,ControlFlowNode> labelsToNodes
-
context
private final DecompilerContext context
-
_nextLabelIndex
private int _nextLabelIndex
-
-
Constructor Detail
-
LoopsAndConditions
LoopsAndConditions(DecompilerContext context)
-
-
Method Detail
-
findConditions
public final void findConditions(Block block)
-
findLoops
public final void findLoops(Block block)
-
buildGraph
private ControlFlowGraph buildGraph(java.util.List<Node> nodes, Label entryLabel)
-
canBeSelfContainedLoop
private boolean canBeSelfContainedLoop(BasicBlock node, Expression branch, Label target)
-
findLoops
private java.util.List<Node> findLoops(java.util.Set<ControlFlowNode> scopeNodes, ControlFlowNode entryPoint, boolean excludeEntryPoint)
-
findLoopExitInfo
private LoopsAndConditions.LoopExitInfo findLoopExitInfo(java.util.Set<ControlFlowNode> contents)
-
countJumps
private int countJumps(java.util.Set<ControlFlowNode> nodes, Label target, Expression ignore)
-
findLoopContents
private static java.util.Set<ControlFlowNode> findLoopContents(java.util.Set<ControlFlowNode> scope, ControlFlowNode head)
-
findConditions
private java.util.List<Node> findConditions(java.util.Set<ControlFlowNode> scopeNodes, ControlFlowNode entryNode)
-
reorderCaseBlocks
private void reorderCaseBlocks(Switch switchNode)
-
hasSingleEdgeEnteringBlock
private static boolean hasSingleEdgeEnteringBlock(ControlFlowNode node)
-
findDominatedNodes
private static java.util.Set<ControlFlowNode> findDominatedNodes(java.util.Set<ControlFlowNode> scope, ControlFlowNode head)
-
-