private void cleanupLoop(LoopStmt loopStmt) { if (MacroNames.isLoopWrapper(loopStmt.getCondition())) { loopStmt.setCondition(loopStmt.getCondition().getChild(0)); } }
private boolean isUnwrappable(LoopStmt loop) { return MacroNames.isLoopWrapper(loop.getCondition()) && !loop .containsDirectBreakOrContinueStmt(); }
@Override public void replaceChild(IAstNode child, IAstNode newChild) { if (child == body) { setBody((Stmt) newChild); } else if (child == condition) { setCondition((Expr) newChild); } else { throw new IllegalArgumentException(); } }
private void handleLoopStmt(LoopStmt loopStmt) { if (ContainsTopLevelBreak.check(loopStmt.getBody()) || ContainsTopLevelContinue.check(loopStmt.getBody())) { return; } if (MacroNames.isDeadByConstruction(loopStmt.getCondition())) { return; } addOpportunity(loopStmt, loopStmt.getBody()); }
@Override public Stmt getNextStmt() { return loopStmt.getBody(); }
@Override public void replaceNext(Stmt stmt) { loopStmt.setBody(stmt); }
@Override public void replaceChild(IAstNode child, IAstNode newChild) { if (child == init) { init = (Stmt) newChild; } else if (child == increment) { increment = (Expr) newChild; } else { super.replaceChild(child, newChild); } }
@Override public boolean hasChild(IAstNode candidateChild) { return candidateChild == init || candidateChild == increment || super.hasChild(candidateChild); }
private static boolean suitableForSwitchInjection(IInjectionPoint injectionPoint) { if (!injectionPoint.hasNextStmt()) { return false; } final Stmt nextStmt = injectionPoint.getNextStmt(); // We are interested in blocks, and loops and conditionals with block bodies, // as long as there are no top-level breaks. if (isBlockWithoutTopLevelBreaks(nextStmt)) { return true; } if (nextStmt instanceof IfStmt) { final IfStmt nextIfStmt = (IfStmt) nextStmt; if (isBlockWithoutTopLevelBreaks(nextIfStmt.getThenStmt())) { return true; } if (nextIfStmt.hasElseStmt() && isBlockWithoutTopLevelBreaks(nextIfStmt.getElseStmt())) { return true; } } if (nextStmt instanceof LoopStmt && isBlockWithoutTopLevelBreaks(((LoopStmt) nextStmt).getBody())) { return true; } return false; }
private void handleLoop(LoopStmt loopStmt) { if (containsReturn(loopStmt)) { loopStmt.setCondition( new BinaryExpr( new ParenExpr(new UnaryExpr(makeHasReturned(), UnOp.LNOT)), loopStmt.getCondition(), BinOp.LAND)); } }
UnOp.POST_INC))); if (loopStmt.getBody() instanceof BlockStmt) { for (int i = limitCheckAndIncrement.size() - 1; i >= 0; i--) { ((BlockStmt) loopStmt.getBody()).insertStmt(0, limitCheckAndIncrement.get(i)); newStmts.add(loopStmt.getBody()); loopStmt.setBody(new BlockStmt(newStmts, loopStmt instanceof DoStmt));