private Expression operationWithConstantValue( BinaryExpression binExp, java.lang.Class expectedClass, Expression constantExp, boolean constantOnLeft, boolean operationWithSideEffect) { Expression exp; if (operationWithSideEffect) { MethodAccess call = new MethodAccess(); call.expression = new This(); exp = call; } else { exp = new IdExpression(); } exp.type = constantExp.type; if (constantOnLeft) { binExp.right = exp; binExp.left = constantExp; } else { binExp.left = exp; binExp.right = constantExp; } if (null == expectedClass) expectedClass = MethodAccess.class; return expressionSimplificationTester(binExp, expectedClass, constantExp.type, 0, false); }
public void testDowncast() { SymbolTableForTests table = new SymbolTableForTests(); table.addClasses("A", "B"); table.getClass("B").superName = "A"; Expression expression = new IdExpression("a"); expression.type = new IdType("A"); ExpressionVisitor visitor = new ExpressionVisitor(table); Cast cast = new Cast(expression); cast.type = new IdType("B"); assertEquals(visitor.visit(cast), cast); }
private Expression expressionSimplificationTester( Expression exp, java.lang.Class expectedClass, Type expectedType, int result, boolean testNumericValue) { ExpressionVisitor cfv = new ExpressionVisitor(new SymbolTable()); Expression simplifiedExp = exp.accept(cfv); assertEquals(expectedType, simplifiedExp.type); assertEquals(expectedClass, simplifiedExp.getClass()); if (testNumericValue) assertEquals(result, ((Number) simplifiedExp).id); return simplifiedExp; }