private static ControlFlowNode findHandlerNode(final ControlFlowGraph cfg, final ExceptionHandler handler) { final List<ControlFlowNode> nodes = cfg.getNodes(); for (int i = nodes.size() - 1; i >= 0; i--) { final ControlFlowNode node = nodes.get(i); if (node.getExceptionHandler() == handler) { return node; } } return null; }
private static ControlFlowNode findHandlerNode(final ControlFlowGraph cfg, final ExceptionHandler handler) { final List<ControlFlowNode> nodes = cfg.getNodes(); for (int i = nodes.size() - 1; i >= 0; i--) { final ControlFlowNode node = nodes.get(i); if (node.getExceptionHandler() == handler) { return node; } } return null; }
private static ControlFlowNode findHandlerNode(final ControlFlowGraph cfg, final ExceptionHandler handler) { final List<ControlFlowNode> nodes = cfg.getNodes(); for (int i = nodes.size() - 1; i >= 0; i--) { final ControlFlowNode node = nodes.get(i); if (node.getExceptionHandler() == handler) { return node; } } return null; }
private static Map<Instruction, ControlFlowNode> createNodeMap(final ControlFlowGraph cfg) { final Map<Instruction, ControlFlowNode> nodeMap = new IdentityHashMap<>(); for (final ControlFlowNode node : cfg.getNodes()) { if (node.getNodeType() != ControlFlowNodeType.Normal) { continue; } for (Instruction p = node.getStart(); p != null && p.getOffset() < node.getEnd().getEndOffset(); p = p.getNext()) { nodeMap.put(p, node); } } return nodeMap; }
private static Map<Instruction, ControlFlowNode> createNodeMap(final ControlFlowGraph cfg) { final Map<Instruction, ControlFlowNode> nodeMap = new IdentityHashMap<>(); for (final ControlFlowNode node : cfg.getNodes()) { if (node.getNodeType() != ControlFlowNodeType.Normal) { continue; } for (Instruction p = node.getStart(); p != null && p.getOffset() < node.getEnd().getEndOffset(); p = p.getNext()) { nodeMap.put(p, node); } } return nodeMap; }
private static Map<Instruction, ControlFlowNode> createNodeMap(final ControlFlowGraph cfg) { final Map<Instruction, ControlFlowNode> nodeMap = new IdentityHashMap<>(); for (final ControlFlowNode node : cfg.getNodes()) { if (node.getNodeType() != ControlFlowNodeType.Normal) { continue; } for (Instruction p = node.getStart(); p != null && p.getOffset() < node.getEnd().getEndOffset(); p = p.getNext()) { nodeMap.put(p, node); } } return nodeMap; }
public final void findLoops(final Block block) { final List<Node> body = block.getBody(); if (body.isEmpty() || block.getEntryGoto() == null) { return; } final ControlFlowGraph graph = buildGraph(body, (Label) block.getEntryGoto().getOperand()); graph.computeDominance(); graph.computeDominanceFrontier(); final Set<ControlFlowNode> cfNodes = new LinkedHashSet<>(); final List<ControlFlowNode> graphNodes = graph.getNodes(); for (int i = 3; i < graphNodes.size(); i++) { cfNodes.add(graphNodes.get(i)); } final List<Node> newBody = findLoops(cfNodes, graph.getEntryPoint(), false); block.getBody().clear(); block.getBody().addAll(newBody); }
public final void findLoops(final Block block) { final List<Node> body = block.getBody(); if (body.isEmpty() || block.getEntryGoto() == null) { return; } final ControlFlowGraph graph = buildGraph(body, (Label) block.getEntryGoto().getOperand()); graph.computeDominance(); graph.computeDominanceFrontier(); final Set<ControlFlowNode> cfNodes = new LinkedHashSet<>(); final List<ControlFlowNode> graphNodes = graph.getNodes(); for (int i = 3; i < graphNodes.size(); i++) { cfNodes.add(graphNodes.get(i)); } final List<Node> newBody = findLoops(cfNodes, graph.getEntryPoint(), false); block.getBody().clear(); block.getBody().addAll(newBody); }
public final void findConditions(final Block block) { final List<Node> body = block.getBody(); if (body.isEmpty() || block.getEntryGoto() == null) { return; } final ControlFlowGraph graph = buildGraph(body, (Label) block.getEntryGoto().getOperand()); graph.computeDominance(); graph.computeDominanceFrontier(); final Set<ControlFlowNode> cfNodes = new LinkedHashSet<>(); final List<ControlFlowNode> graphNodes = graph.getNodes(); for (int i = 3; i < graphNodes.size(); i++) { cfNodes.add(graphNodes.get(i)); } final List<Node> newBody = findConditions(cfNodes, graph.getEntryPoint()); block.getBody().clear(); block.getBody().addAll(newBody); }
public final void findConditions(final Block block) { final List<Node> body = block.getBody(); if (body.isEmpty() || block.getEntryGoto() == null) { return; } final ControlFlowGraph graph = buildGraph(body, (Label) block.getEntryGoto().getOperand()); graph.computeDominance(); graph.computeDominanceFrontier(); final Set<ControlFlowNode> cfNodes = new LinkedHashSet<>(); final List<ControlFlowNode> graphNodes = graph.getNodes(); for (int i = 3; i < graphNodes.size(); i++) { cfNodes.add(graphNodes.get(i)); } final List<Node> newBody = findConditions(cfNodes, graph.getEntryPoint()); block.getBody().clear(); block.getBody().addAll(newBody); }
public final void findConditions(final Block block) { final List<Node> body = block.getBody(); if (body.isEmpty() || block.getEntryGoto() == null) { return; } final ControlFlowGraph graph = buildGraph(body, (Label) block.getEntryGoto().getOperand()); graph.computeDominance(); graph.computeDominanceFrontier(); final Set<ControlFlowNode> cfNodes = new LinkedHashSet<>(); final List<ControlFlowNode> graphNodes = graph.getNodes(); for (int i = 3; i < graphNodes.size(); i++) { cfNodes.add(graphNodes.get(i)); } final List<Node> newBody = findConditions(cfNodes, graph.getEntryPoint()); block.getBody().clear(); block.getBody().addAll(newBody); }
public final void findLoops(final Block block) { final List<Node> body = block.getBody(); if (body.isEmpty() || block.getEntryGoto() == null) { return; } final ControlFlowGraph graph = buildGraph(body, (Label) block.getEntryGoto().getOperand()); graph.computeDominance(); graph.computeDominanceFrontier(); final Set<ControlFlowNode> cfNodes = new LinkedHashSet<>(); final List<ControlFlowNode> graphNodes = graph.getNodes(); for (int i = 3; i < graphNodes.size(); i++) { cfNodes.add(graphNodes.get(i)); } final List<Node> newBody = findLoops(cfNodes, graph.getEntryPoint(), false); block.getBody().clear(); block.getBody().addAll(newBody); }
private static ControlFlowNode findInnermostExceptionHandlerNode(final ControlFlowGraph cfg, final int offsetInTryBlock) { ExceptionHandler result = null; ControlFlowNode resultNode = null; final List<ControlFlowNode> nodes = cfg.getNodes(); for (int i = nodes.size() - 1; i >= 0; i--) { final ControlFlowNode node = nodes.get(i); final ExceptionHandler handler = node.getExceptionHandler(); if (handler == null) { break; } final InstructionBlock tryBlock = handler.getTryBlock(); if (tryBlock.getFirstInstruction().getOffset() <= offsetInTryBlock && offsetInTryBlock < tryBlock.getLastInstruction().getEndOffset() && isNarrower(handler, result)) { result = handler; resultNode = node; } } return resultNode; }
private static ControlFlowNode findInnermostExceptionHandlerNode(final ControlFlowGraph cfg, final int offsetInTryBlock) { ExceptionHandler result = null; ControlFlowNode resultNode = null; final List<ControlFlowNode> nodes = cfg.getNodes(); for (int i = nodes.size() - 1; i >= 0; i--) { final ControlFlowNode node = nodes.get(i); final ExceptionHandler handler = node.getExceptionHandler(); if (handler == null) { break; } final InstructionBlock tryBlock = handler.getTryBlock(); if (tryBlock.getFirstInstruction().getOffset() <= offsetInTryBlock && offsetInTryBlock < tryBlock.getLastInstruction().getEndOffset() && isNarrower(handler, result)) { result = handler; resultNode = node; } } return resultNode; }
private static ControlFlowNode findInnermostExceptionHandlerNode(final ControlFlowGraph cfg, final int offsetInTryBlock) { ExceptionHandler result = null; ControlFlowNode resultNode = null; final List<ControlFlowNode> nodes = cfg.getNodes(); for (int i = nodes.size() - 1; i >= 0; i--) { final ControlFlowNode node = nodes.get(i); final ExceptionHandler handler = node.getExceptionHandler(); if (handler == null) { break; } final InstructionBlock tryBlock = handler.getTryBlock(); if (tryBlock.getFirstInstruction().getOffset() <= offsetInTryBlock && offsetInTryBlock < tryBlock.getLastInstruction().getEndOffset() && isNarrower(handler, result)) { result = handler; resultNode = node; } } return resultNode; }
private static ControlFlowNode findNode(final ControlFlowGraph cfg, final Instruction instruction) { final int offset = instruction.getOffset(); for (final ControlFlowNode node : cfg.getNodes()) { if (node.getNodeType() != ControlFlowNodeType.Normal) { continue; } if (offset >= node.getStart().getOffset() && offset < node.getEnd().getEndOffset()) { return node; } } return null; }
private static ControlFlowNode findNode(final ControlFlowGraph cfg, final Instruction instruction) { final int offset = instruction.getOffset(); for (final ControlFlowNode node : cfg.getNodes()) { if (node.getNodeType() != ControlFlowNodeType.Normal) { continue; } if (offset >= node.getStart().getOffset() && offset < node.getEnd().getEndOffset()) { return node; } } return null; }
private static ControlFlowNode findNode(final ControlFlowGraph cfg, final Instruction instruction) { final int offset = instruction.getOffset(); for (final ControlFlowNode node : cfg.getNodes()) { if (node.getNodeType() != ControlFlowNodeType.Normal) { continue; } if (offset >= node.getStart().getOffset() && offset < node.getEnd().getEndOffset()) { return node; } } return null; }
private static ControlFlowNode findInnermostExceptionHandlerNode( final ControlFlowGraph cfg, final int offsetInTryBlock, final boolean finallyOnly) { ExceptionHandler result = null; ControlFlowNode resultNode = null; final List<ControlFlowNode> nodes = cfg.getNodes(); for (int i = nodes.size() - 1; i >= 0; i--) { final ControlFlowNode node = nodes.get(i); final ExceptionHandler handler = node.getExceptionHandler(); if (handler == null) { break; } if (finallyOnly && handler.isCatch()) { continue; } final InstructionBlock tryBlock = handler.getTryBlock(); if (tryBlock.getFirstInstruction().getOffset() <= offsetInTryBlock && offsetInTryBlock < tryBlock.getLastInstruction().getEndOffset() && (result == null || tryBlock.getFirstInstruction().getOffset() > result.getTryBlock().getFirstInstruction().getOffset())) { result = handler; resultNode = node; } } return resultNode != null ? resultNode : cfg.getExceptionalExit(); }
private static ControlFlowNode findInnermostExceptionHandlerNode( final ControlFlowGraph cfg, final int offsetInTryBlock, final boolean finallyOnly) { ExceptionHandler result = null; ControlFlowNode resultNode = null; final List<ControlFlowNode> nodes = cfg.getNodes(); for (int i = nodes.size() - 1; i >= 0; i--) { final ControlFlowNode node = nodes.get(i); final ExceptionHandler handler = node.getExceptionHandler(); if (handler == null) { break; } if (finallyOnly && handler.isCatch()) { continue; } final InstructionBlock tryBlock = handler.getTryBlock(); if (tryBlock.getFirstInstruction().getOffset() <= offsetInTryBlock && offsetInTryBlock < tryBlock.getLastInstruction().getEndOffset() && (result == null || tryBlock.getFirstInstruction().getOffset() > result.getTryBlock().getFirstInstruction().getOffset())) { result = handler; resultNode = node; } } return resultNode != null ? resultNode : cfg.getExceptionalExit(); }