private static void replaceLoopCounterInCondition(Expr condition, String newLoopCounter) { BinaryExpr binaryExpr = (BinaryExpr) condition; VariableIdentifierExpr toReplace; if (binaryExpr.getLhs() instanceof VariableIdentifierExpr) { toReplace = (VariableIdentifierExpr) binaryExpr.getLhs(); } else { toReplace = (VariableIdentifierExpr) binaryExpr.getRhs(); } toReplace.setName(newLoopCounter); }
@Override public void visitBinaryExpr(BinaryExpr binaryExpr) { super.visitBinaryExpr(binaryExpr); if (binaryExpr.getOp().isSideEffecting()) { if (binaryExpr.getLhs() instanceof VariableIdentifierExpr && ((VariableIdentifierExpr) binaryExpr.getLhs()).getName() .equals(loopCounterName)) { foundModification = true; } } }
@Override public void visitBinaryExpr(BinaryExpr binaryExpr) { boolean isSideEffecting = binaryExpr.getOp().isSideEffecting(); if (isSideEffecting) { enterLValueContext(); } visitChildFromParent(binaryExpr.getLhs(), binaryExpr); if (isSideEffecting) { exitLValueContext(); } visitChildFromParent(binaryExpr.getRhs(), binaryExpr); }
private void handleLoop(LoopStmt loopStmt) { if (containsReturn(loopStmt)) { loopStmt.setCondition( new BinaryExpr( new ParenExpr(new UnaryExpr(makeHasReturned(), UnOp.LNOT)), loopStmt.getCondition(), BinOp.LAND)); } }
private BinaryExpr compareWithGlFragCoord(boolean value, boolean constContext, Fuzzer fuzzer, int newDepth, String coord) { return new BinaryExpr( new MemberLookupExpr(new VariableIdentifierExpr(OpenGlConstants.GL_FRAG_COORD), coord), makeOpaqueZero(BasicType.FLOAT, constContext, newDepth, fuzzer), value ? BinOp.GE : BinOp.LT); }
private static boolean isLiveInjectionVariableReference(Expr lhs) { while (lhs instanceof MemberLookupExpr) { lhs = ((MemberLookupExpr) lhs).getStructure(); } return lhs instanceof VariableIdentifierExpr && ((VariableIdentifierExpr) lhs).getName() .startsWith( Constants.LIVE_PREFIX); }
@Override public BinaryExpr clone() { return new BinaryExpr(lhs.clone(), rhs.clone(), op); }
@Override public Expr generateExpr(IRandom generator, Expr... args) { assert args.length == getNumArguments(); return new ParenExpr(new BinaryExpr(args[0], args[1], op)); }
@Override public MemberLookupExpr clone() { return new MemberLookupExpr(structure.clone(), member); }
@Override public ArrayIndexExpr clone() { return new ArrayIndexExpr(array.clone(), index.clone()); }
@Override public TernaryExpr clone() { return new TernaryExpr(test.clone(), thenExpr.clone(), elseExpr.clone()); }
@Override public Expr generateExpr(IRandom generator, Expr... args) { assert args.length == getNumArguments(); return new ParenExpr(new TernaryExpr(args[0], args[1], args[2])); }
@Override public VariableIdentifierExpr clone() { return new VariableIdentifierExpr(name); }
static Expr makeWrappedIfCondition(Expr expr, boolean truth) { return new FunctionCallExpr(truth ? Constants.GLF_WRAPPED_IF_TRUE : Constants.GLF_WRAPPED_IF_FALSE, expr); }
@Override public boolean preconditionHolds() { if (!parent.hasChild(childToReduce)) { return false; } return true; }