/** * Build a binary expression that compares two values * @param lhv expression for the value to compare from * @param rhv expression for the value value to compare to * @return the expression comparing two values */ public static BinaryExpression cmpX(Expression lhv, Expression rhv) { return new BinaryExpression(lhv, CMP, rhv); }
public static BinaryExpression andX(Expression lhv, Expression rhv) { return new BinaryExpression(lhv, AND, rhv); }
public static Expression indexX(Expression target, Expression value) { return new BinaryExpression(target, INDEX, value); }
public static BinaryExpression orX(Expression lhv, Expression rhv) { return new BinaryExpression(lhv, OR, rhv); }
public static BinaryExpression ltX(Expression lhv, Expression rhv) { return new BinaryExpression(lhv, LT, rhv); }
public static BinaryExpression neX(Expression lhv, Expression rhv) { return new BinaryExpression(lhv, NE, rhv); }
public static BinaryExpression plusX(Expression lhv, Expression rhv) { return new BinaryExpression(lhv, PLUS, rhv); }
/** * Creates an assignment expression in which the specified expression * is written into the specified variable name. */ public static BinaryExpression newAssignmentExpression(Variable variable, Expression rhs) { VariableExpression lhs = new VariableExpression(variable); Token operator = Token.newPlaceholder(Types.ASSIGN); return new BinaryExpression(lhs, operator, rhs); }
public static BooleanExpression isZeroX(Expression expr) { return new BooleanExpression(new BinaryExpression(expr, EQ, new ConstantExpression(0))); }
public static BooleanExpression notNullX(Expression argExpr) { return new BooleanExpression(new BinaryExpression(argExpr, NE, new ConstantExpression(null))); }
protected static void addFieldInit(Parameter p, FieldNode fn, BlockStatement block) { VariableExpression ve = new VariableExpression(p); FieldExpression fe = new FieldExpression(fn); block.addStatement(new ExpressionStatement( new BinaryExpression(fe, Token.newSymbol(Types.ASSIGN, -1, -1), ve) )); }
/** * Creates variable initialization expression in which the specified expression * is written into the specified variable name. */ public static BinaryExpression newInitializationExpression(String variable, ClassNode type, Expression rhs) { VariableExpression lhs = new VariableExpression(variable); if (type != null) { lhs.setType(type); } Token operator = Token.newPlaceholder(Types.ASSIGN); return new BinaryExpression(lhs, operator, rhs); }
private TernaryExpression createStaticReceiver(final Expression receiver) { return new TernaryExpression( new BooleanExpression(new BinaryExpression( receiver, Token.newSymbol(Types.KEYWORD_INSTANCEOF, -1, -1), new ClassExpression(ClassHelper.CLASS_Type) )), receiver, new MethodCallExpression(createFieldHelperReceiver(), "getClass", ArgumentListExpression.EMPTY_ARGUMENTS) ); }
public Expression transformExpression(ExpressionTransformer transformer) { Expression ret = new BinaryExpression(transformer.transform(leftExpression), operation, transformer.transform(rightExpression)); ret.setSourcePosition(this); ret.copyNodeMetaData(this); return ret; }
private BinaryExpression createVariableNotNullExpression(VariableExpression var) { return new BinaryExpression( new VariableExpression(var), Token.newSymbol(Types.COMPARE_NOT_EQUAL, -1, -1), new ConstantExpression(null)); }
private void moveVariableDeclarations(List<Statement> from, List<Statement> to) { for (Statement stat : from) { DeclarationExpression declExpr = AstUtil.getExpression(stat, DeclarationExpression.class); if (declExpr == null) continue; ((ExpressionStatement) stat).setExpression( new BinaryExpression( copyLhsVariableExpressions(declExpr), Token.newSymbol(Types.ASSIGN, -1, -1), declExpr.getRightExpression())); declExpr.setRightExpression(createDefaultValueInitializer(declExpr)); to.add(new ExpressionStatement(declExpr)); } }
private BinaryExpression createAssignmentToField(final Expression rightExpression, final Token operation, final String fieldName) { return new BinaryExpression( new PropertyExpression( new VariableExpression(weaved), fieldName ), operation, transform(rightExpression)); }
protected Expression instanceofExpression(AST node) { AST leftNode = node.getFirstChild(); Expression leftExpression = expression(leftNode); AST rightNode = leftNode.getNextSibling(); ClassNode type = buildName(rightNode); assertTypeNotNull(type, rightNode); Expression rightExpression = new ClassExpression(type); configureAST(rightExpression, rightNode); BinaryExpression binaryExpression = new BinaryExpression(leftExpression, makeToken(Types.KEYWORD_INSTANCEOF, node), rightExpression); configureAST(binaryExpression, node); return binaryExpression; }
private CatchStatement createThrowableAssignmentAndRethrowCatchStatement(VariableExpression assignmentVar) { Parameter catchParameter = new Parameter(nodeCache.Throwable, "$spock_tmp_throwable"); BinaryExpression assignThrowableExpr = new BinaryExpression( new VariableExpression(assignmentVar), Token.newSymbol(Types.ASSIGN, -1, -1), new VariableExpression(catchParameter)); return new CatchStatement(catchParameter, new BlockStatement( Arrays.asList( new ExpressionStatement(assignThrowableExpr), new ThrowStatement(new VariableExpression(catchParameter))), new VariableScope())); }
@Override public void visitBinaryExpression(BinaryExpression expr) { // order of convert calls is important or indexes and thus recorded values get confused Expression convertedLeftExpression = Types.ofType(expr.getOperation().getType(), Types.ASSIGNMENT_OPERATOR) ? // prevent lvalue from getting turned into record(lvalue), which can no longer be assigned to convertAndRecordNa(expr.getLeftExpression()) : convert(expr.getLeftExpression()); Expression convertedRightExpression = convert(expr.getRightExpression()); Expression conversion = Types.ofType(expr.getOperation().getType(), Types.KEYWORD_INSTANCEOF) ? // morph instanceof expression to isInstance method call to be able to record rvalue new MethodCallExpression(convertedRightExpression, "isInstance", convertedLeftExpression): new BinaryExpression(convertedLeftExpression, expr.getOperation(), convertedRightExpression); conversion.setSourcePosition(expr); result = record(conversion); }