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 class
LoopsAndConditions.LoopExitInfo
-
Field Summary
Fields Modifier and Type Field Description private int
_nextLabelIndex
private DecompilerContext
context
private 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 ControlFlowGraph
buildGraph(java.util.List<Node> nodes, Label entryLabel)
private boolean
canBeSelfContainedLoop(BasicBlock node, Expression branch, Label target)
private int
countJumps(java.util.Set<ControlFlowNode> nodes, Label target, Expression ignore)
void
findConditions(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.LoopExitInfo
findLoopExitInfo(java.util.Set<ControlFlowNode> contents)
void
findLoops(Block block)
private java.util.List<Node>
findLoops(java.util.Set<ControlFlowNode> scopeNodes, ControlFlowNode entryPoint, boolean excludeEntryPoint)
private static boolean
hasSingleEdgeEnteringBlock(ControlFlowNode node)
private void
reorderCaseBlocks(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)
-
-