private boolean isBinaryBoolean(BinaryExpr exp) { Expr left = exp.getLeft(); Expr right = exp.getRight(); if (left.accept(this) && right.accept(this)) return (left.typeOf(environment).equals(new BoolType()) && right.typeOf(environment).equals(new BoolType())); else return false; }
public void visit(BinaryExpr n, Object arg) { n.getLeft().accept(this, arg); switch (n.getOperator()) { case or: break; case and: break; case binOr: break; case binAnd: break; case xor: break; case equals: break; case notEquals: break; case less: break; case greater: break; case lessEquals: break; case greaterEquals: break; case lShift: break; case rSignedShift: break; case rUnsignedShift: break; case plus: break; case minus: break; case times: break; case divide: break; case remainder: break; } n.getRight().accept(this, arg); }
@Override public Boolean visit(final BinaryExpr n1, final Node arg) { final BinaryExpr n2 = (BinaryExpr) arg; if (n1.getOperator() != n2.getOperator()) { return Boolean.FALSE; } if (!nodeEquals(n1.getLeft(), n2.getLeft())) { return Boolean.FALSE; } if (!nodeEquals(n1.getRight(), n2.getRight())) { return Boolean.FALSE; } return Boolean.TRUE; }
/** @apilevel internal */ public void flushCollectionCache() { super.flushCollectionCache(); }
/** @apilevel low-level */ public void flushCache() { super.flushCache(); }
@Override public void visit(BinaryExpr expr) { switch (expr.getOperation()) { case AND: case OR: resultExpr = expr; return; default: break; } expr.getSecondOperand().acceptVisitor(this); Expr b = resultExpr; if (b instanceof ConstantExpr && expr.getOperation() == BinaryOperation.SUBTRACT) { if (tryMakePositive((ConstantExpr) b)) { expr.setOperation(BinaryOperation.ADD); } } expr.getFirstOperand().acceptVisitor(this); Expr a = resultExpr; Expr p = a; Expr q = b; boolean invert = false; if (isZero(p)) { Expr tmp = p; p = q; q = tmp; invert = true; } if (isComparison(p) && isZero(q)) { switch (expr.getOperation()) { case EQUALS: case NOT_EQUALS: case LESS: case LESS_OR_EQUALS: case GREATER: case GREATER_OR_EQUALS: { BinaryExpr comparison = (BinaryExpr) p; Expr result = BinaryExpr.binary( expr.getOperation(), comparison.getFirstOperand(), comparison.getSecondOperand()); result.setLocation(comparison.getLocation()); if (invert) { result = ExprOptimizer.invert(result); } resultExpr = result; return; } default: break; } } expr.setFirstOperand(a); expr.setSecondOperand(b); resultExpr = expr; }
private <U> void dfs(BinaryExpr e, Visitor v, U context) { assert e.getLhs() != null; assert e.getRhs() != null; e.getLhs().accept(v, context); e.getRhs().accept(v, context); }