@Override public void visitUnaryExpr(UnaryExpr unaryExpr) { switch (unaryExpr.getOp()) { case PRE_INC: case PRE_DEC: case BNEG: case LNOT: out.append(unaryExpr.getOp().getText() + " "); break; case POST_DEC: break; default: assert false : "Unknown unary operator " + unaryExpr.getOp(); switch (unaryExpr.getOp()) { case POST_DEC: case POST_INC: out.append(" " + unaryExpr.getOp().getText()); break; case PRE_INC: break; default: assert false : "Unknown unary operator " + unaryExpr.getOp();
@Override public void visitUnaryExpr(UnaryExpr unaryExpr) { if (isSideEffectingUnOp(unaryExpr.getOp())) { insideLValueCount++; } super.visitUnaryExpr(unaryExpr); if (isSideEffectingUnOp(unaryExpr.getOp())) { assert insideLValueCount > 0; insideLValueCount--; } if (!isSideEffectingUnOp(unaryExpr.getOp())) { identifyMutationPoints(unaryExpr); } }
@Override public void visitUnaryExpr(UnaryExpr unaryExpr) { if (unaryExpr.getOp().isSideEffecting()) { predicateHolds(); } super.visitUnaryExpr(unaryExpr); }
private Optional<Integer> getAsConstant(Expr expr) { if (expr instanceof ParenExpr) { return getAsConstant(((ParenExpr)expr).getExpr()); } if (expr instanceof IntConstantExpr) { return Optional.of(Integer.valueOf(((IntConstantExpr) expr).getValue())); } if (expr instanceof UnaryExpr) { final UnaryExpr unaryExpr = (UnaryExpr) expr; switch (unaryExpr.getOp()) { case MINUS: return getAsConstant(unaryExpr.getExpr()).map(item -> -item); case PLUS: return getAsConstant(unaryExpr.getExpr()); default: return Optional.empty(); } } return Optional.empty(); }
private Optional<Integer> getIncrementValue(Expr incr, String loopCounterName) { if (incr instanceof UnaryExpr && isSameVarIdentifier(((UnaryExpr) incr).getExpr(), loopCounterName)) { switch (((UnaryExpr) incr).getOp()) { case POST_INC: case PRE_INC:
switch (((UnaryExpr) increment).getOp()) { case PRE_INC: case POST_INC:
/** * Determines whether the given statement came from a live code injection. * * @param stmt A statement to be analysed * @return Whether the statement is injected live code or not */ public static boolean isSimpleLiveCodeInjection(Stmt stmt) { if (!(stmt instanceof ExprStmt)) { return false; } final Expr expr = ((ExprStmt) stmt).getExpr(); if (expr instanceof BinaryExpr) { if (!((BinaryExpr) expr).getOp().isSideEffecting()) { return false; } return isLiveInjectionVariableReference(((BinaryExpr) expr).getLhs()); } if (expr instanceof UnaryExpr) { if (!((UnaryExpr) expr).getOp().isSideEffecting()) { return false; } return isLiveInjectionVariableReference(((UnaryExpr) expr).getExpr()); } if (expr instanceof FunctionCallExpr) { return ((FunctionCallExpr) expr).getCallee().startsWith(Constants.LIVE_PREFIX); } return false; }
if (maybeUe.isPresent()) { final Expr arg = maybeUe.get().getExpr(); switch (maybeUe.get().getOp()) { case PLUS: findFoldPlusMinusZeroOpportunities(parent, child, arg);