aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main/java/org/zwobble/couscous/ast/MethodCallNode.java9
-rw-r--r--src/main/java/org/zwobble/couscous/ast/Operator.java3
-rw-r--r--src/main/java/org/zwobble/couscous/frontends/java/JavaOperators.java6
-rw-r--r--src/test/java/org/zwobble/couscous/tests/frontends/java/JavaReaderTests.java13
4 files changed, 28 insertions, 3 deletions
diff --git a/src/main/java/org/zwobble/couscous/ast/MethodCallNode.java b/src/main/java/org/zwobble/couscous/ast/MethodCallNode.java
index 076ac9e..efeee93 100644
--- a/src/main/java/org/zwobble/couscous/ast/MethodCallNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/MethodCallNode.java
@@ -8,7 +8,6 @@ import java.util.Collections;
import java.util.List;
import java.util.function.Function;
-import static java.util.Arrays.asList;
import static org.zwobble.couscous.util.ExtraLists.eagerMap;
import static org.zwobble.couscous.util.ExtraLists.list;
@@ -21,6 +20,14 @@ public class MethodCallNode implements ExpressionNode {
}
}
+ public static ExpressionNode booleanAnd(ExpressionNode left, ExpressionNode right) {
+ return booleanOperation(Operator.BOOLEAN_AND.getMethodName(), left, right);
+ }
+
+ public static ExpressionNode booleanOr(ExpressionNode left, ExpressionNode right) {
+ return booleanOperation(Operator.BOOLEAN_OR.getMethodName(), left, right);
+ }
+
public static ExpressionNode integerAdd(ExpressionNode left, ExpressionNode right) {
return integerOperation(Operator.ADD.getMethodName(), left, right);
}
diff --git a/src/main/java/org/zwobble/couscous/ast/Operator.java b/src/main/java/org/zwobble/couscous/ast/Operator.java
index 549224c..a215138 100644
--- a/src/main/java/org/zwobble/couscous/ast/Operator.java
+++ b/src/main/java/org/zwobble/couscous/ast/Operator.java
@@ -1,6 +1,9 @@
package org.zwobble.couscous.ast;
public enum Operator {
+ BOOLEAN_AND("and", true),
+ BOOLEAN_OR("or", true),
+
ADD("add", false),
SUBTRACT("subtract", false),
MULTIPLY("multiply", false),
diff --git a/src/main/java/org/zwobble/couscous/frontends/java/JavaOperators.java b/src/main/java/org/zwobble/couscous/frontends/java/JavaOperators.java
index f3a18f9..824c134 100644
--- a/src/main/java/org/zwobble/couscous/frontends/java/JavaOperators.java
+++ b/src/main/java/org/zwobble/couscous/frontends/java/JavaOperators.java
@@ -17,7 +17,11 @@ public class JavaOperators {
}
static Operator readOperator(InfixExpression.Operator operator) {
- if (operator == InfixExpression.Operator.PLUS) {
+ if (operator == InfixExpression.Operator.CONDITIONAL_AND) {
+ return Operator.BOOLEAN_AND;
+ } else if (operator == InfixExpression.Operator.CONDITIONAL_OR) {
+ return Operator.BOOLEAN_OR;
+ } else if (operator == InfixExpression.Operator.PLUS) {
return Operator.ADD;
} else if (operator == InfixExpression.Operator.MINUS) {
return Operator.SUBTRACT;
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 1ffd809..75b3b62 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
@@ -229,7 +229,18 @@ public class JavaReaderTests {
constructorCall(TypeName.of("java.lang.Object"), emptyList()))),
readBooleanExpression("new Object() != new Object()"));
}
-
+
+ @Test
+ public void canUseOperatorsOnBooleans() {
+ assertEquals(
+ booleanAnd(literal(true), literal(false)),
+ readBooleanExpression("true && false"));
+
+ assertEquals(
+ booleanOr(literal(true), literal(false)),
+ readBooleanExpression("true || false"));
+ }
+
@Test
public void canUseOperatorsOnIntegers() {
assertEquals(