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;
  }
Ejemplo n.º 2
0
 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);
 }
Ejemplo n.º 3
0
  @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;
  }
Ejemplo n.º 4
0
 /** @apilevel internal */
 public void flushCollectionCache() {
   super.flushCollectionCache();
 }
Ejemplo n.º 5
0
 /** @apilevel low-level */
 public void flushCache() {
   super.flushCache();
 }
Ejemplo n.º 6
0
 @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);
 }