aboutsummaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2015-11-15 13:40:21 +0000
committerMichael Williamson <mike@zwobble.org>2015-11-15 13:40:21 +0000
commit63956680fa5f6e61210e090036c797d94e4a340c (patch)
tree13680a800766d06f079720cedc21b5e24e7a4db5 /src/main
parentb590542b4cb33e456a2d5e5922fbd68c391e681d (diff)
Handle boxing in infix expressions more accurately
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java22
1 files changed, 17 insertions, 5 deletions
diff --git a/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java b/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java
index dee5430..32662a6 100644
--- a/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java
+++ b/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java
@@ -327,10 +327,9 @@ public class JavaReader {
}
private static ExpressionNode readInfixExpression(InfixExpression expression) {
- TypeName operandType = typeOf(expression.getLeftOperand());
- if (operandType.equals(IntegerValue.REF)) {
+ if (isPrimitiveOperation(expression)) {
Operator operator = readOperator(expression.getOperator());
- return readOperation(
+ return readPrimitiveOperation(
operator,
expression.getLeftOperand(),
expression.getRightOperand());
@@ -347,6 +346,19 @@ public class JavaReader {
}
}
+ private static boolean isPrimitiveOperation(InfixExpression expression) {
+ TypeName leftOperandType = typeOf(expression.getLeftOperand());
+ TypeName rightOperandType = typeOf(expression.getRightOperand());
+ return isPrimitive(leftOperandType)
+ || isPrimitive(rightOperandType)
+ || (expression.getOperator() != InfixExpression.Operator.NOT_EQUALS
+ && expression.getOperator() != InfixExpression.Operator.EQUALS);
+ }
+
+ private static boolean isPrimitive(TypeName type) {
+ return type.equals(BooleanValue.REF) || type.equals(IntegerValue.REF);
+ }
+
private static ExpressionNode readPrefixExpression(PrefixExpression expression) {
Operator operator = readOperator(expression.getOperator());
return AssignmentNode.assign(
@@ -378,11 +390,11 @@ public class JavaReader {
left,
handleBoxing(
left.getType(),
- readOperation(operator, expression.getLeftHandSide(), expression.getRightHandSide())));
+ readPrimitiveOperation(operator, expression.getLeftHandSide(), expression.getRightHandSide())));
}
}
- private static ExpressionNode readOperation(Operator operator, Expression leftJava, Expression rightJava) {
+ private static ExpressionNode readPrimitiveOperation(Operator operator, Expression leftJava, Expression rightJava) {
ExpressionNode left = readUnboxedExpression(leftJava);
ExpressionNode right = readUnboxedExpression(rightJava);
return MethodCallNode.methodCall(