/** * This method sets the leftExpression for this BinaryExpression. The parameter must be * either a VariableExpression or a TupleExpression with one or more elements. * @param leftExpression * either a VariableExpression or a TupleExpression with one or more elements. */ public void setLeftExpression(Expression leftExpression) { check(leftExpression); super.setLeftExpression(leftExpression); }
@Override public void visitBinaryExpression(BinaryExpression expr) { expr.setLeftExpression(replaceExpr(expr.getLeftExpression())); expr.setRightExpression(replaceExpr(expr.getRightExpression())); }
private static BinaryExpression tryOptimizeCharComparison(final Expression left, final Expression right, final BinaryExpression bin) { int op = bin.getOperation().getType(); if (isCompareToBoolean(op) || op == COMPARE_EQUAL || op == COMPARE_NOT_EQUAL) { Character cLeft = tryCharConstant(left); Character cRight = tryCharConstant(right); if (cLeft != null || cRight != null) { Expression oLeft = cLeft == null ? left : new ConstantExpression(cLeft, true); oLeft.setSourcePosition(left); Expression oRight = cRight == null ? right : new ConstantExpression(cRight, true); oRight.setSourcePosition(right); bin.setLeftExpression(oLeft); bin.setRightExpression(oRight); return bin; } } return null; }
protected Expression transformBinaryExpression(BinaryExpression be) { int type = be.getOperation().getType(); boolean oldInLeftExpression; Expression right = transform(be.getRightExpression()); be.setRightExpression(right); Expression left; if (type == Types.EQUAL && be.getLeftExpression() instanceof VariableExpression) { oldInLeftExpression = inLeftExpression; inLeftExpression = true; left = transform(be.getLeftExpression()); inLeftExpression = oldInLeftExpression; if (left instanceof StaticMethodCallExpression) { StaticMethodCallExpression smce = (StaticMethodCallExpression) left; StaticMethodCallExpression result = new StaticMethodCallExpression(smce.getOwnerType(), smce.getMethod(), right); setSourcePosition(result, be); return result; } } else { left = transform(be.getLeftExpression()); } be.setLeftExpression(left); return be; }
be.setLeftExpression(transformInlineConstants(be.getLeftExpression())); be.setRightExpression(transformInlineConstants(be.getRightExpression())); return be;
be.setLeftExpression(left); be.setRightExpression(right); return be;
public void setLeftExpression(Expression leftExpression) { super.setLeftExpression((VariableExpression) leftExpression); }
/** * This method sets the leftExpression for this BinaryExpression. The parameter must be * either a VariableExpression or a TupleExpression with one or more elements. * @param leftExpression * either a VariableExpression or a TupleExpression with one or more elements. */ public void setLeftExpression(Expression leftExpression) { check(leftExpression); super.setLeftExpression(leftExpression); }
public void setLeftExpression(Expression leftExpression) { check(leftExpression,getRightExpression()); super.setLeftExpression(leftExpression); }
public void setLeftExpression(Expression leftExpression) { check(leftExpression,getRightExpression()); super.setLeftExpression(leftExpression); }
@Override public void visitBinaryExpression(BinaryExpression expression) { checkOperation(expression, expression.getOperation()); if (secondPass) { if (expression.getLeftExpression() instanceof VariableExpression) { VariableExpression variableExpression = (VariableExpression) expression.getLeftExpression(); if (variableExpressions.containsKey(variableExpression)) { expression.setLeftExpression(variableExpressions.get(variableExpression)); } } if (expression.getRightExpression() instanceof VariableExpression) { VariableExpression variableExpression = (VariableExpression) expression.getRightExpression(); if (variableExpressions.containsKey(variableExpression)) { expression.setRightExpression(variableExpressions.get(variableExpression)); } } } super.visitBinaryExpression(expression); }
@Override public void visitBinaryExpression(BinaryExpression expr) { expr.setLeftExpression(replaceExpr(expr.getLeftExpression())); expr.setRightExpression(replaceExpr(expr.getRightExpression())); }
private void transformBinaryExpression(MethodCallExpression call, BinaryExpression expression) { // Matches: task <expression> <operator> <expression> if (expression.getLeftExpression() instanceof VariableExpression || expression.getLeftExpression() instanceof GStringExpression || expression .getLeftExpression() instanceof ConstantExpression) { // Matches: task <identifier> <operator> <expression> | task <string> <operator> <expression> // Map to: passThrough(task('<identifier>') <operator> <expression>) | passThrough(task(<string>) <operator> <expression>) call.setMethod(new ConstantExpression("passThrough")); Expression argument; if (expression.getLeftExpression() instanceof VariableExpression) { argument = new ConstantExpression(expression.getLeftExpression().getText()); } else { argument = expression.getLeftExpression(); } expression.setLeftExpression(new MethodCallExpression(call.getObjectExpression(), "task", argument)); } else if (expression.getLeftExpression() instanceof MethodCallExpression) { // Matches: task <method-call> <operator> <expression> MethodCallExpression transformedCall = new MethodCallExpression(call.getObjectExpression(), "task", new ArgumentListExpression()); boolean transformed = maybeTransformNestedMethodCall((MethodCallExpression) expression.getLeftExpression(), transformedCall); if (transformed) { // Matches: task <identifier> <arg-list> <operator> <expression> // Map to: passThrough(task('<identifier>', <arg-list>) <operator> <expression>) call.setMethod(new ConstantExpression("passThrough")); expression.setLeftExpression(transformedCall); } } }
protected Expression transformBinaryExpression(BinaryExpression be) { Expression left = transform(be.getLeftExpression()); int type = be.getOperation().getType(); if ((type == Types.ASSIGNMENT_OPERATOR || type == Types.EQUAL) && left instanceof ClassExpression) { ClassExpression ce = (ClassExpression) left; String error = "you tried to assign a value to the class '" + ce.getType().getName() + "'"; if (ce.getType().isScript()) { error += ". Do you have a script with this name?"; } addError(error, be.getLeftExpression()); return be; } if (left instanceof ClassExpression && be.getRightExpression() instanceof ListExpression) { // we have C[] if the list is empty -> should be an array then! ListExpression list = (ListExpression) be.getRightExpression(); if (list.getExpressions().isEmpty()) { return new ClassExpression(left.getType().makeArray()); } } Expression right = transform(be.getRightExpression()); be.setLeftExpression(left); be.setRightExpression(right); return be; }
protected Expression transformBinaryExpression(BinaryExpression be) { Expression left = transform(be.getLeftExpression()); int type = be.getOperation().getType(); if ((type == Types.ASSIGNMENT_OPERATOR || type == Types.EQUAL) && left instanceof ClassExpression) { ClassExpression ce = (ClassExpression) left; String error = "you tried to assign a value to the class '" + ce.getType().getName() + "'"; if (ce.getType().isScript()) { error += ". Do you have a script with this name?"; } addError(error, be.getLeftExpression()); return be; } if (left instanceof ClassExpression && be.getRightExpression() instanceof ListExpression) { // we have C[] if the list is empty -> should be an array then! ListExpression list = (ListExpression) be.getRightExpression(); if (list.getExpressions().isEmpty()) { return new ClassExpression(left.getType().makeArray()); } } Expression right = transform(be.getRightExpression()); be.setLeftExpression(left); be.setRightExpression(right); return be; }
protected Expression transformBinaryExpression(BinaryExpression be) { Expression left = transform(be.getLeftExpression()); int type = be.getOperation().getType(); if ((type == Types.ASSIGNMENT_OPERATOR || type == Types.EQUAL) && left instanceof ClassExpression) { ClassExpression ce = (ClassExpression) left; String error = "you tried to assign a value to the class '" + ce.getType().getName() + "'"; if (ce.getType().isScript()) { error += ". Do you have a script with this name?"; } addError(error, be.getLeftExpression()); return be; } if (left instanceof ClassExpression && be.getRightExpression() instanceof ListExpression) { // we have C[] if the list is empty -> should be an array then! ListExpression list = (ListExpression) be.getRightExpression(); if (list.getExpressions().isEmpty()) { return new ClassExpression(left.getType().makeArray()); } } Expression right = transform(be.getRightExpression()); be.setLeftExpression(left); be.setRightExpression(right); return be; }
protected Expression transformBinaryExpression(BinaryExpression be) { int type = be.getOperation().getType(); boolean oldInLeftExpression; Expression right = transform(be.getRightExpression()); be.setRightExpression(right); Expression left; if (type == Types.EQUAL && be.getLeftExpression() instanceof VariableExpression) { oldInLeftExpression = inLeftExpression; inLeftExpression = true; left = transform(be.getLeftExpression()); inLeftExpression = oldInLeftExpression; if (left instanceof StaticMethodCallExpression) { StaticMethodCallExpression smce = (StaticMethodCallExpression) left; StaticMethodCallExpression result = new StaticMethodCallExpression(smce.getOwnerType(), smce.getMethod(), right); setSourcePosition(result, be); return result; } } else { left = transform(be.getLeftExpression()); } be.setLeftExpression(left); return be; }
be.setLeftExpression(left); be.setRightExpression(right); return be;
be.setLeftExpression(left); be.setRightExpression(right); return be;