final ControlFlowNode copyFinallySubGraph() { for (final ControlFlowNode node : end.getPredecessors()) { collectNodes(node); } for (final ControlFlowNode old : oldToNew.keySet()) { reconstructEdges(old, oldToNew.get(old)); } return getNew(start); }
private static Set<ControlFlowNode> findLoopContents(final Set<ControlFlowNode> scope, final ControlFlowNode head) { final Set<ControlFlowNode> viaBackEdges = new LinkedHashSet<>(); for (final ControlFlowNode predecessor : head.getPredecessors()) { if (head.dominates(predecessor)) { viaBackEdges.add(predecessor); for (final ControlFlowNode predecessor : addNode.getPredecessors()) { agenda.add(predecessor);
final ControlFlowNode copyFinallySubGraph() { for (final ControlFlowNode node : end.getPredecessors()) { collectNodes(node); } for (final ControlFlowNode old : oldToNew.keySet()) { reconstructEdges(old, oldToNew.get(old)); } return getNew(start); }
final ControlFlowNode copyFinallySubGraph() { for (final ControlFlowNode node : end.getPredecessors()) { collectNodes(node); } for (final ControlFlowNode old : oldToNew.keySet()) { reconstructEdges(old, oldToNew.get(old)); } return getNew(start); }
private static Set<ControlFlowNode> findLoopContents(final Set<ControlFlowNode> scope, final ControlFlowNode head) { final Set<ControlFlowNode> viaBackEdges = new LinkedHashSet<>(); for (final ControlFlowNode predecessor : head.getPredecessors()) { if (head.dominates(predecessor)) { viaBackEdges.add(predecessor); for (final ControlFlowNode predecessor : addNode.getPredecessors()) { agenda.add(predecessor);
private static Set<ControlFlowNode> findLoopContents(final Set<ControlFlowNode> scope, final ControlFlowNode head) { final Set<ControlFlowNode> viaBackEdges = new LinkedHashSet<>(); for (final ControlFlowNode predecessor : head.getPredecessors()) { if (head.dominates(predecessor)) { viaBackEdges.add(predecessor); for (final ControlFlowNode predecessor : addNode.getPredecessors()) { agenda.add(predecessor);
@Override public final void accept(final ControlFlowNode b) { if (b == entryPoint) { return; } ControlFlowNode newImmediateDominator = null; for (final ControlFlowNode p : b.getPredecessors()) { if (p.isVisited() && p != b) { newImmediateDominator = p; break; } } if (newImmediateDominator == null) { throw new IllegalStateException("Could not compute new immediate dominator!"); } for (final ControlFlowNode p : b.getPredecessors()) { if (p != b && p.getImmediateDominator() != null) { newImmediateDominator = findCommonDominator(p, newImmediateDominator); } } if (b.getImmediateDominator() != newImmediateDominator) { b.setImmediateDominator(newImmediateDominator); changed.set(true); } } }
@Override public final void accept(final ControlFlowNode b) { if (b == entryPoint) { return; } ControlFlowNode newImmediateDominator = null; for (final ControlFlowNode p : b.getPredecessors()) { if (p.isVisited() && p != b) { newImmediateDominator = p; break; } } if (newImmediateDominator == null) { throw new IllegalStateException("Could not compute new immediate dominator!"); } for (final ControlFlowNode p : b.getPredecessors()) { if (p != b && p.getImmediateDominator() != null) { newImmediateDominator = findCommonDominator(p, newImmediateDominator); } } if (b.getImmediateDominator() != newImmediateDominator) { b.setImmediateDominator(newImmediateDominator); changed.set(true); } } }
@Override public final void accept(final ControlFlowNode b) { if (b == entryPoint) { return; } ControlFlowNode newImmediateDominator = null; for (final ControlFlowNode p : b.getPredecessors()) { if (p.isVisited() && p != b) { newImmediateDominator = p; break; } } if (newImmediateDominator == null) { throw new IllegalStateException("Could not compute new immediate dominator!"); } for (final ControlFlowNode p : b.getPredecessors()) { if (p != b && p.getImmediateDominator() != null) { newImmediateDominator = findCommonDominator(p, newImmediateDominator); } } if (b.getImmediateDominator() != newImmediateDominator) { b.setImmediateDominator(newImmediateDominator); changed.set(true); } } }
private void collectNodes(final ControlFlowNode node) { if (node == end || node == newEnd) { throw new IllegalStateException("Unexpected cycle involving finally constructs!"); } if (oldToNew.containsKey(node)) { return; } final int newBlockIndex = _nodes.size(); final ControlFlowNode copy; switch (node.getNodeType()) { case Normal: copy = new ControlFlowNode(newBlockIndex, node.getStart(), node.getEnd()); break; case FinallyHandler: copy = new ControlFlowNode(newBlockIndex, node.getExceptionHandler(), node.getEndFinallyNode()); break; default: throw ContractUtils.unsupported(); } copy.setCopyFrom(node); _nodes.add(copy); oldToNew.put(node, copy); if (node != start) { for (final ControlFlowNode predecessor : node.getPredecessors()) { collectNodes(predecessor); } } }
private void collectNodes(final ControlFlowNode node) { if (node == end || node == newEnd) { throw new IllegalStateException("Unexpected cycle involving finally constructs!"); } if (oldToNew.containsKey(node)) { return; } final int newBlockIndex = _nodes.size(); final ControlFlowNode copy; switch (node.getNodeType()) { case Normal: copy = new ControlFlowNode(newBlockIndex, node.getStart(), node.getEnd()); break; case FinallyHandler: copy = new ControlFlowNode(newBlockIndex, node.getExceptionHandler(), node.getEndFinallyNode()); break; default: throw ContractUtils.unsupported(); } copy.setCopyFrom(node); _nodes.add(copy); oldToNew.put(node, copy); if (node != start) { for (final ControlFlowNode predecessor : node.getPredecessors()) { collectNodes(predecessor); } } }
private void collectNodes(final ControlFlowNode node) { if (node == end || node == newEnd) { throw new IllegalStateException("Unexpected cycle involving finally constructs!"); } if (oldToNew.containsKey(node)) { return; } final int newBlockIndex = _nodes.size(); final ControlFlowNode copy; switch (node.getNodeType()) { case Normal: copy = new ControlFlowNode(newBlockIndex, node.getStart(), node.getEnd()); break; case FinallyHandler: copy = new ControlFlowNode(newBlockIndex, node.getExceptionHandler(), node.getEndFinallyNode()); break; default: throw ContractUtils.unsupported(); } copy.setCopyFrom(node); _nodes.add(copy); oldToNew.put(node, copy); if (node != start) { for (final ControlFlowNode predecessor : node.getPredecessors()) { collectNodes(predecessor); } } }
for (final ControlFlowNode exit : cfg.getRegularExit().getPredecessors()) { if (exit.getNodeType() == ControlFlowNodeType.Normal && tryBlock.contains(exit.getEnd())) { for (final ControlFlowNode exit : cfg.getExceptionalExit().getPredecessors()) { if (exit.getNodeType() == ControlFlowNodeType.Normal && tryBlock.contains(exit.getEnd())) {
for (final ControlFlowNode exit : cfg.getRegularExit().getPredecessors()) { if (exit.getNodeType() == ControlFlowNodeType.Normal && tryBlock.contains(exit.getEnd())) { for (final ControlFlowNode exit : cfg.getExceptionalExit().getPredecessors()) { if (exit.getNodeType() == ControlFlowNodeType.Normal && tryBlock.contains(exit.getEnd())) {
for (final ControlFlowNode exit : cfg.getRegularExit().getPredecessors()) { if (exit.getNodeType() == ControlFlowNodeType.Normal && tryBlock.contains(exit.getEnd())) { for (final ControlFlowNode exit : cfg.getExceptionalExit().getPredecessors()) { if (exit.getNodeType() == ControlFlowNodeType.Normal && tryBlock.contains(exit.getEnd())) {
final ControlFlowNode predecessor = firstOrDefault(postLoopTarget.getPredecessors()); final ControlFlowNode predecessor = single(postLoopTarget.getPredecessors());
final ControlFlowNode predecessor = firstOrDefault(postLoopTarget.getPredecessors()); final ControlFlowNode predecessor = single(postLoopTarget.getPredecessors());
final ControlFlowNode predecessor = firstOrDefault(postLoopTarget.getPredecessors()); final ControlFlowNode predecessor = single(postLoopTarget.getPredecessors());