@Override public void visit(BinaryExpr n, Void arg) { out.println("BinaryExpr: " + (extended ? n : n.getLeft() + " " + n.getOperator() + " " + n.getRight())); super.visit(n, arg); }
@Override public ResolvedType visit(BinaryExpr node, Boolean solveLambdas) { switch (node.getOperator()) { case PLUS: case MINUS: case DIVIDE: case MULTIPLY: return facade.getBinaryTypeConcrete(node.getLeft(), node.getRight(), solveLambdas, node.getOperator()); case LESS_EQUALS: case LESS: case GREATER: case GREATER_EQUALS: case EQUALS: case NOT_EQUALS: case OR: case AND: return ResolvedPrimitiveType.BOOLEAN; case BINARY_AND: case BINARY_OR: case SIGNED_RIGHT_SHIFT: case UNSIGNED_RIGHT_SHIFT: case LEFT_SHIFT: case REMAINDER: case XOR: return node.getLeft().accept(this, solveLambdas); default: throw new UnsupportedOperationException("Operator " + node.getOperator().name()); } }
@Override public boolean doIsEquals(BinaryExpr first, BinaryExpr second) { if(!isEqualsUseMerger(first.getLeft(),second.getLeft())) return false; if(!isEqualsUseMerger(first.getRight(),second.getRight())) return false; if(!first.getOperator().equals(second.getOperator())) return false; return true; } }
@Override public ResolvedType visit(BinaryExpr node, Boolean solveLambdas) { switch (node.getOperator()) { case PLUS: case MINUS: case DIVIDE: case MULTIPLY: return facade.getBinaryTypeConcrete(node.getLeft(), node.getRight(), solveLambdas); case LESS_EQUALS: case LESS: case GREATER: case GREATER_EQUALS: case EQUALS: case NOT_EQUALS: case OR: case AND: return ResolvedPrimitiveType.BOOLEAN; case BINARY_AND: case BINARY_OR: case SIGNED_RIGHT_SHIFT: case UNSIGNED_RIGHT_SHIFT: case LEFT_SHIFT: case REMAINDER: case XOR: return node.getLeft().accept(this, solveLambdas); default: throw new UnsupportedOperationException("Operator " + node.getOperator().name()); } }
@Override public ResolvedType visit(BinaryExpr node, Boolean solveLambdas) { switch (node.getOperator()) { case PLUS: case MINUS: case DIVIDE: case MULTIPLY: return facade.getBinaryTypeConcrete(node.getLeft(), node.getRight(), solveLambdas); case LESS_EQUALS: case LESS: case GREATER: case GREATER_EQUALS: case EQUALS: case NOT_EQUALS: case OR: case AND: return ResolvedPrimitiveType.BOOLEAN; case BINARY_AND: case BINARY_OR: case SIGNED_RIGHT_SHIFT: case UNSIGNED_RIGHT_SHIFT: case LEFT_SHIFT: case REMAINDER: case XOR: return node.getLeft().accept(this, solveLambdas); default: throw new UnsupportedOperationException("Operator " + node.getOperator().name()); } }
binaryExpr.getLeft(), binaryExpr.getRight(), binaryExpr.getOperator()));
@Override public BinaryExpr doMerge(BinaryExpr first, BinaryExpr second) { BinaryExpr be = new BinaryExpr(); be.setOperator(first.getOperator()); be.setLeft(mergeSingle(first.getLeft(),second.getLeft())); be.setRight(mergeSingle(first.getRight(),second.getRight())); return be; }