/** * @param number number of a basic block in this cfg */ public int getNumberOfExceptionalOut(int number) { int xtra = 0; if (exceptionalToExit.get(number)) { xtra++; } return exceptionalEdgeManager.getSuccNodeCount(number) + xtra; }
/** * @param number number of a basic block in this cfg */ public int getNumberOfExceptionalOut(int number) { int xtra = 0; if (exceptionalToExit.get(number)) { xtra++; } return exceptionalEdgeManager.getSuccNodeCount(number) + xtra; }
public boolean hasNormalEdge(T src, T dst) { if (dst == null) { throw new IllegalArgumentException("dst is null"); } int x = getNumber(src); if (dst.equals(exit())) { return normalToExit.get(x); } else if (getNumber(dst) == (x + 1) && fallThru.get(x)) { return true; } return normalEdgeManager.hasEdge(src, dst); }
@Override public boolean hasEdge(T src, T dst) { if (dst == null) { throw new IllegalArgumentException("dst is null"); } int x = getNumber(src); if (dst.equals(exit())) { return normalToExit.get(x) || exceptionalToExit.get(x); } else if (getNumber(dst) == (x + 1) && fallThru.get(x)) { return true; } return normalEdgeManager.hasEdge(src, dst) || exceptionalEdgeManager.hasEdge(src, dst); }
@Override public boolean hasEdge(T src, T dst) { if (dst == null) { throw new IllegalArgumentException("dst is null"); } int x = getNumber(src); if (dst.equals(exit())) { return normalToExit.get(x) || exceptionalToExit.get(x); } else if (getNumber(dst) == (x + 1) && fallThru.get(x)) { return true; } return normalEdgeManager.hasEdge(src, dst) || exceptionalEdgeManager.hasEdge(src, dst); }
public boolean hasNormalEdge(T src, T dst) { if (dst == null) { throw new IllegalArgumentException("dst is null"); } int x = getNumber(src); if (dst.equals(exit())) { return normalToExit.get(x); } else if (getNumber(dst) == (x + 1) && fallThru.get(x)) { return true; } return normalEdgeManager.hasEdge(src, dst); }
public boolean hasExceptionalEdge(T src, T dst) { if (dst == null) { throw new IllegalArgumentException("dst is null"); } int x = getNumber(src); if (dst.equals(exit())) { return exceptionalToExit.get(x); } return exceptionalEdgeManager.hasEdge(src, dst); }
public boolean hasExceptionalEdge(T src, T dst) { if (dst == null) { throw new IllegalArgumentException("dst is null"); } int x = getNumber(src); if (dst.equals(exit())) { return exceptionalToExit.get(x); } return exceptionalEdgeManager.hasEdge(src, dst); }
@Override public Iterator<T> getSuccNodes(T N) { int number = getNumber(N); if (normalToExit.get(number) && exceptionalToExit.get(number)) { return new CompoundIterator<>(iterateNormalSuccessorsWithoutExit(number), iterateExceptionalSuccessors(number)); } else { return new CompoundIterator<>(iterateNormalSuccessors(number), iterateExceptionalSuccessors(number)); } }
@Override public Iterator<T> getSuccNodes(T N) { int number = getNumber(N); if (normalToExit.get(number) && exceptionalToExit.get(number)) { return new CompoundIterator<>(iterateNormalSuccessorsWithoutExit(number), iterateExceptionalSuccessors(number)); } else { return new CompoundIterator<>(iterateNormalSuccessors(number), iterateExceptionalSuccessors(number)); } }
Iterator<T> iterateExceptionalPredecessors(T N) { if (N.equals(exit())) { return new FilterIterator<>(iterator(), o -> { int i = getNumber(o); return exceptionalToExit.get(i); }); } else { return exceptionalEdgeManager.getPredNodes(N); } }
Iterator<T> iterateExceptionalPredecessors(T N) { if (N.equals(exit())) { return new FilterIterator<>(iterator(), o -> { int i = getNumber(o); return exceptionalToExit.get(i); }); } else { return exceptionalEdgeManager.getPredNodes(N); } }
private Iterator<T> iterateNormalSuccessorsWithoutExit(int number) { if (fallThru.get(number)) { return IteratorPlusOne.make(normalEdgeManager.getSuccNodes(number), getNode(number + 1)); } else { return normalEdgeManager.getSuccNodes(number); } }
private Iterator<T> iterateNormalSuccessorsWithoutExit(int number) { if (fallThru.get(number)) { return IteratorPlusOne.make(normalEdgeManager.getSuccNodes(number), getNode(number + 1)); } else { return normalEdgeManager.getSuccNodes(number); } }
Iterator<T> iterateNormalPredecessors(T N) { if (N.equals(exit())) { return new FilterIterator<>(iterator(), o -> { int i = getNumber(o); return normalToExit.get(i); }); } else { int number = getNumber(N); if (number > 0 && fallThru.get(number - 1)) { return IteratorPlusOne.make(normalEdgeManager.getPredNodes(N), getNode(number - 1)); } else { return normalEdgeManager.getPredNodes(N); } } }
/** * has exceptional edge src -> dest * * @throws IllegalArgumentException if dest is null */ public boolean hasExceptionalEdge(BasicBlock src, BasicBlock dest) { if (dest == null) { throw new IllegalArgumentException("dest is null"); } if (dest.isExitBlock()) { int srcNum = getNumber(src); return delegate.getExceptionalToExit().get(srcNum); } return delegate.hasExceptionalEdge(getUnderlyingBlock(src), getUnderlyingBlock(dest)); }
/** * has normal edge src -> dest * * @throws IllegalArgumentException if dest is null */ public boolean hasNormalEdge(BasicBlock src, BasicBlock dest) { if (dest == null) { throw new IllegalArgumentException("dest is null"); } if (dest.isExitBlock()) { int srcNum = getNumber(src); return delegate.getNormalToExit().get(srcNum); } return delegate.hasNormalEdge(getUnderlyingBlock(src), getUnderlyingBlock(dest)); }