@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 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; }
List<Statement> stmts; if ((c instanceof BinaryExpr) && ((be = (BinaryExpr)c).getLeft() instanceof FieldAccessExpr) && ((FieldAccessExpr)be.getLeft()).getNameAsString().equals("featOkTst")) { if (! (be.getRight() instanceof BinaryExpr) || ! ((be2 = (BinaryExpr)be.getRight()).getRight() instanceof NullLiteralExpr) || ! (be2.getLeft() instanceof FieldAccessExpr)
private Expression getLeftmostExpression(Expression expression) { if (expression instanceof BinaryExpr) { return getLeftmostExpression(((BinaryExpr) expression).getLeft()); } return expression; }
/** * Get the type of an expression from the cast at the beginning. (int) 12 -> 12 of type int (int) * 15 + 5 -> 15 + 5 of type int (float) (12 + 3) -> 12 + 3 of type float ((int) 12) + 3 -> ((int) * 12) + 3 of type Any ((JsArray) myArray).getAt(0) -> ((JsArray) myArray).getAt(0) of type Any * * @param expression The expression to process * @return The modified expression (where cast has been removed if necessary) */ private Expression getTypeFromCast(Expression expression) { if (expression instanceof BinaryExpr) { Expression mostLeft = getLeftmostExpression(expression); if (mostLeft instanceof CastExpr) { CastExpr castExpr = (CastExpr) mostLeft; currentExpressionReturnType = stringTypeToTypeName(castExpr.getType().toString()); BinaryExpr parent = (BinaryExpr) mostLeft.getParentNode().get(); parent.setLeft(castExpr.getExpression()); } } else if (expression instanceof CastExpr) { CastExpr castExpr = (CastExpr) expression; currentExpressionReturnType = stringTypeToTypeName(castExpr.getType().toString()); expression = castExpr.getExpression(); } return expression; }
@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, 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 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()));