From 4c9a1c8d062c849e34ce0176e60b5cccca65c127 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sat, 14 Nov 2015 17:18:57 +0000 Subject: Handle boxing correctly in compound assignments --- .../tests/frontends/java/JavaReaderTests.java | 38 ++++++++++++++++++++++ 1 file changed, 38 insertions(+) (limited to 'src/test') diff --git a/src/test/java/org/zwobble/couscous/tests/frontends/java/JavaReaderTests.java b/src/test/java/org/zwobble/couscous/tests/frontends/java/JavaReaderTests.java index 6f116cc..c08035f 100644 --- a/src/test/java/org/zwobble/couscous/tests/frontends/java/JavaReaderTests.java +++ b/src/test/java/org/zwobble/couscous/tests/frontends/java/JavaReaderTests.java @@ -379,6 +379,44 @@ public class JavaReaderTests { statement.getExpression()); } + @Test + public void rightOperandOfCompoundAssignmentsIsUnboxedIfNecessary() { + ClassNode classNode = readClass( + "public void go(int left, Integer right) {" + + " left += right;" + + "}"); + + MethodNode method = classNode.getMethods().get(0); + FormalArgumentNode left = method.getArguments().get(0); + FormalArgumentNode right = method.getArguments().get(1); + ExpressionStatementNode statement = (ExpressionStatementNode) + classNode.getMethods().get(0).getBody().get(0); + assertEquals( + assign( + reference(left), + integerAdd(reference(left), unboxInt(reference(right)))), + statement.getExpression()); + } + + @Test + public void leftOperandOfCompoundAssignmentsIsUnboxedIfNecessary() { + ClassNode classNode = readClass( + "public void go(Integer left, int right) {" + + " left += right;" + + "}"); + + MethodNode method = classNode.getMethods().get(0); + FormalArgumentNode left = method.getArguments().get(0); + FormalArgumentNode right = method.getArguments().get(1); + ExpressionStatementNode statement = (ExpressionStatementNode) + classNode.getMethods().get(0).getBody().get(0); + assertEquals( + assign( + reference(left), + boxInt(integerAdd(unboxInt(reference(left)), reference(right)))), + statement.getExpression()); + } + @Test public void canReadPrefixDecrement() { ClassNode classNode = readClass( -- cgit v1.2.3