diff options
| author | Michael Williamson <mike@zwobble.org> | 2015-12-31 22:07:13 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2015-12-31 22:07:13 +0000 |
| commit | 34db8d9949d41e6433fa3e09b7ead9032d319023 (patch) | |
| tree | f0c6eeced9c4112f8ffdf9e62ba560fac178aaf5 /src/main/java | |
| parent | 1e770167feb081a1019fd4401ec583ab4f0543ff (diff) | |
Add support for reading Boolean negation
Diffstat (limited to 'src/main/java')
| -rw-r--r-- | src/main/java/org/zwobble/couscous/frontends/java/JavaExpressionReader.java | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/src/main/java/org/zwobble/couscous/frontends/java/JavaExpressionReader.java b/src/main/java/org/zwobble/couscous/frontends/java/JavaExpressionReader.java index c864371..a7592a9 100644 --- a/src/main/java/org/zwobble/couscous/frontends/java/JavaExpressionReader.java +++ b/src/main/java/org/zwobble/couscous/frontends/java/JavaExpressionReader.java @@ -13,6 +13,7 @@ import java.util.stream.IntStream; import static java.util.Arrays.asList; import static org.zwobble.couscous.ast.ConstructorCallNode.constructorCall; import static org.zwobble.couscous.ast.LiteralNode.literal; +import static org.zwobble.couscous.ast.MethodCallNode.not; import static org.zwobble.couscous.ast.VariableDeclaration.var; import static org.zwobble.couscous.ast.VariableReferenceNode.reference; import static org.zwobble.couscous.frontends.java.JavaOperators.readOperator; @@ -238,7 +239,7 @@ public class JavaExpressionReader { if (expression.getOperator() == InfixExpression.Operator.EQUALS) { return StaticMethodCallNode.same(left, right); } else if (expression.getOperator() == InfixExpression.Operator.NOT_EQUALS) { - return MethodCallNode.not(StaticMethodCallNode.same(left, right)); + return not(StaticMethodCallNode.same(left, right)); } else { throw new IllegalArgumentException("Unsupported operator: " + expression.getOperator()); } @@ -259,14 +260,18 @@ public class JavaExpressionReader { } private ExpressionNode readPrefixExpression(PrefixExpression expression) { - Operator operator = readOperator(expression.getOperator()); - return AssignmentNode.assign( - (AssignableExpressionNode) readExpressionWithoutBoxing(expression.getOperand()), - MethodCallNode.methodCall( - readExpression(IntegerValue.REF, expression.getOperand()), - operator.getMethodName(), - asList(literal(1)), - IntegerValue.REF)); + if (expression.getOperator() == PrefixExpression.Operator.NOT) { + return not(readExpression(BooleanValue.REF, expression.getOperand())); + } else { + Operator operator = readOperator(expression.getOperator()); + return AssignmentNode.assign( + (AssignableExpressionNode) readExpressionWithoutBoxing(expression.getOperand()), + MethodCallNode.methodCall( + readExpression(IntegerValue.REF, expression.getOperand()), + operator.getMethodName(), + asList(literal(1)), + IntegerValue.REF)); + } } private ExpressionNode readConditionalExpression(ConditionalExpression expression) { |
