aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2015-12-31 22:07:13 +0000
committerMichael Williamson <mike@zwobble.org>2015-12-31 22:07:13 +0000
commit34db8d9949d41e6433fa3e09b7ead9032d319023 (patch)
treef0c6eeced9c4112f8ffdf9e62ba560fac178aaf5 /src/main/java/org/zwobble
parent1e770167feb081a1019fd4401ec583ab4f0543ff (diff)
Add support for reading Boolean negation
Diffstat (limited to 'src/main/java/org/zwobble')
-rw-r--r--src/main/java/org/zwobble/couscous/frontends/java/JavaExpressionReader.java23
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) {