diff options
| author | Michael Williamson <mike@zwobble.org> | 2016-01-10 15:26:43 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2016-01-10 15:26:43 +0000 |
| commit | bea8f44c058369bd175fb6b9e8da5b456669854d (patch) | |
| tree | d770a82903efd712d286d200f207bfbfedcaff73 /src | |
| parent | f5472abda7010c63a18b55e322de52a3f9f0c5ca (diff) | |
Read boolean and/or operators
Diffstat (limited to 'src')
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( |
