aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main/java/org/zwobble/couscous/ast/MethodCallNode.java72
-rw-r--r--src/main/java/org/zwobble/couscous/ast/Operations.java79
-rw-r--r--src/main/java/org/zwobble/couscous/frontends/java/JavaExpressionReader.java3
-rw-r--r--src/test/java/org/zwobble/couscous/tests/BackendEvalTests.java16
-rw-r--r--src/test/java/org/zwobble/couscous/tests/BackendMethodTests.java4
-rw-r--r--src/test/java/org/zwobble/couscous/tests/frontends/java/JavaReaderTests.java1
6 files changed, 88 insertions, 87 deletions
diff --git a/src/main/java/org/zwobble/couscous/ast/MethodCallNode.java b/src/main/java/org/zwobble/couscous/ast/MethodCallNode.java
index 3bae839..b385eec 100644
--- a/src/main/java/org/zwobble/couscous/ast/MethodCallNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/MethodCallNode.java
@@ -1,86 +1,14 @@
package org.zwobble.couscous.ast;
import org.zwobble.couscous.ast.visitors.ExpressionNodeMapper;
-import org.zwobble.couscous.values.BooleanValue;
-import org.zwobble.couscous.values.IntegerValue;
-import java.util.Collections;
import java.util.List;
import java.util.function.Function;
import static org.zwobble.couscous.ast.InstanceReceiver.instanceReceiver;
import static org.zwobble.couscous.util.ExtraLists.eagerMap;
-import static org.zwobble.couscous.util.ExtraLists.list;
public class MethodCallNode implements ExpressionNode {
- public static ExpressionNode not(ExpressionNode value) {
- if (value.getType().equals(BooleanValue.REF)) {
- return methodCall(value, "negate", Collections.emptyList(), BooleanValue.REF);
- } else {
- throw new IllegalArgumentException("Can only negate booleans");
- }
- }
-
- 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);
- }
-
- public static ExpressionNode integerSubtract(ExpressionNode left, ExpressionNode right) {
- return integerOperation(Operator.SUBTRACT.getMethodName(), left, right);
- }
-
- public static ExpressionNode integerMultiply(ExpressionNode left, ExpressionNode right) {
- return integerOperation(Operator.MULTIPLY.getMethodName(), left, right);
- }
-
- public static ExpressionNode integerDivide(ExpressionNode left, ExpressionNode right) {
- return integerOperation(Operator.DIVIDE.getMethodName(), left, right);
- }
-
- public static ExpressionNode integerMod(ExpressionNode left, ExpressionNode right) {
- return integerOperation(Operator.MOD.getMethodName(), left, right);
- }
-
- public static MethodCallNode integerOperation(String methodName, ExpressionNode left, ExpressionNode right) {
- return methodCall(left, methodName, list(right), IntegerValue.REF);
- }
-
- public static ExpressionNode equal(ExpressionNode left, ExpressionNode right) {
- return booleanOperation(Operator.EQUALS.getMethodName(), left, right);
- }
-
- public static ExpressionNode notEqual(ExpressionNode left, ExpressionNode right) {
- return booleanOperation(Operator.NOT_EQUALS.getMethodName(), left, right);
- }
-
- public static ExpressionNode greaterThan(ExpressionNode left, ExpressionNode right) {
- return booleanOperation(Operator.GREATER_THAN.getMethodName(), left, right);
- }
-
- public static ExpressionNode greaterThanOrEqual(ExpressionNode left, ExpressionNode right) {
- return booleanOperation(Operator.GREATER_THAN_OR_EQUAL.getMethodName(), left, right);
- }
-
- public static ExpressionNode lessThan(ExpressionNode left, ExpressionNode right) {
- return booleanOperation(Operator.LESS_THAN.getMethodName(), left, right);
- }
-
- public static ExpressionNode lessThanOrEqual(ExpressionNode left, ExpressionNode right) {
- return booleanOperation(Operator.LESS_THAN_OR_EQUAL.getMethodName(), left, right);
- }
-
- private static ExpressionNode booleanOperation(String methodName, ExpressionNode left, ExpressionNode right) {
- return methodCall(left, methodName, list(right), BooleanValue.REF);
- }
-
public static MethodCallNode methodCall(
ExpressionNode receiver,
String methodName,
diff --git a/src/main/java/org/zwobble/couscous/ast/Operations.java b/src/main/java/org/zwobble/couscous/ast/Operations.java
new file mode 100644
index 0000000..5691891
--- /dev/null
+++ b/src/main/java/org/zwobble/couscous/ast/Operations.java
@@ -0,0 +1,79 @@
+package org.zwobble.couscous.ast;
+
+import org.zwobble.couscous.values.BooleanValue;
+import org.zwobble.couscous.values.IntegerValue;
+
+import java.util.Collections;
+
+import static org.zwobble.couscous.ast.MethodCallNode.methodCall;
+import static org.zwobble.couscous.util.ExtraLists.list;
+
+public class Operations {
+ public static ExpressionNode not(ExpressionNode value) {
+ if (value.getType().equals(BooleanValue.REF)) {
+ return methodCall(value, "negate", Collections.emptyList(), BooleanValue.REF);
+ } else {
+ throw new IllegalArgumentException("Can only negate booleans");
+ }
+ }
+
+ 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);
+ }
+
+ public static ExpressionNode integerSubtract(ExpressionNode left, ExpressionNode right) {
+ return integerOperation(Operator.SUBTRACT.getMethodName(), left, right);
+ }
+
+ public static ExpressionNode integerMultiply(ExpressionNode left, ExpressionNode right) {
+ return integerOperation(Operator.MULTIPLY.getMethodName(), left, right);
+ }
+
+ public static ExpressionNode integerDivide(ExpressionNode left, ExpressionNode right) {
+ return integerOperation(Operator.DIVIDE.getMethodName(), left, right);
+ }
+
+ public static ExpressionNode integerMod(ExpressionNode left, ExpressionNode right) {
+ return integerOperation(Operator.MOD.getMethodName(), left, right);
+ }
+
+ public static MethodCallNode integerOperation(String methodName, ExpressionNode left, ExpressionNode right) {
+ return methodCall(left, methodName, list(right), IntegerValue.REF);
+ }
+
+ public static ExpressionNode equal(ExpressionNode left, ExpressionNode right) {
+ return booleanOperation(Operator.EQUALS.getMethodName(), left, right);
+ }
+
+ public static ExpressionNode notEqual(ExpressionNode left, ExpressionNode right) {
+ return booleanOperation(Operator.NOT_EQUALS.getMethodName(), left, right);
+ }
+
+ public static ExpressionNode greaterThan(ExpressionNode left, ExpressionNode right) {
+ return booleanOperation(Operator.GREATER_THAN.getMethodName(), left, right);
+ }
+
+ public static ExpressionNode greaterThanOrEqual(ExpressionNode left, ExpressionNode right) {
+ return booleanOperation(Operator.GREATER_THAN_OR_EQUAL.getMethodName(), left, right);
+ }
+
+ public static ExpressionNode lessThan(ExpressionNode left, ExpressionNode right) {
+ return booleanOperation(Operator.LESS_THAN.getMethodName(), left, right);
+ }
+
+ public static ExpressionNode lessThanOrEqual(ExpressionNode left, ExpressionNode right) {
+ return booleanOperation(Operator.LESS_THAN_OR_EQUAL.getMethodName(), left, right);
+ }
+
+ private static ExpressionNode booleanOperation(String methodName, ExpressionNode left, ExpressionNode right) {
+ return methodCall(left, methodName, list(right), BooleanValue.REF);
+ }
+}
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 67c1e04..21d7112 100644
--- a/src/main/java/org/zwobble/couscous/frontends/java/JavaExpressionReader.java
+++ b/src/main/java/org/zwobble/couscous/frontends/java/JavaExpressionReader.java
@@ -10,10 +10,9 @@ import java.util.List;
import java.util.stream.Collectors;
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.Operations.not;
import static org.zwobble.couscous.ast.TypeCoercionNode.typeCoercion;
import static org.zwobble.couscous.frontends.java.JavaOperators.readOperator;
import static org.zwobble.couscous.frontends.java.JavaTypes.typeOf;
diff --git a/src/test/java/org/zwobble/couscous/tests/BackendEvalTests.java b/src/test/java/org/zwobble/couscous/tests/BackendEvalTests.java
index 3ca5a1a..a555802 100644
--- a/src/test/java/org/zwobble/couscous/tests/BackendEvalTests.java
+++ b/src/test/java/org/zwobble/couscous/tests/BackendEvalTests.java
@@ -1,28 +1,22 @@
package org.zwobble.couscous.tests;
-import java.util.Collections;
-import java.util.List;
-
import org.junit.Test;
-import org.zwobble.couscous.ast.ClassNode;
-import org.zwobble.couscous.ast.ExpressionNode;
-import org.zwobble.couscous.ast.FormalArgumentNode;
-import org.zwobble.couscous.ast.TypeName;
-import org.zwobble.couscous.values.BooleanValue;
+import org.zwobble.couscous.ast.*;
import org.zwobble.couscous.values.IntegerValue;
import org.zwobble.couscous.values.PrimitiveValue;
import org.zwobble.couscous.values.StringValue;
-import com.google.common.collect.ImmutableList;
+import java.util.Collections;
+import java.util.List;
-import static java.util.Arrays.asList;
import static org.junit.Assert.assertEquals;
import static org.zwobble.couscous.ast.AssignmentNode.assignStatement;
import static org.zwobble.couscous.ast.ConstructorCallNode.constructorCall;
import static org.zwobble.couscous.ast.FieldAccessNode.fieldAccess;
import static org.zwobble.couscous.ast.FormalArgumentNode.formalArg;
import static org.zwobble.couscous.ast.LiteralNode.literal;
-import static org.zwobble.couscous.ast.MethodCallNode.*;
+import static org.zwobble.couscous.ast.MethodCallNode.methodCall;
+import static org.zwobble.couscous.ast.Operations.*;
import static org.zwobble.couscous.ast.ReturnNode.returns;
import static org.zwobble.couscous.ast.StaticMethodCallNode.same;
import static org.zwobble.couscous.ast.StaticMethodCallNode.staticMethodCall;
diff --git a/src/test/java/org/zwobble/couscous/tests/BackendMethodTests.java b/src/test/java/org/zwobble/couscous/tests/BackendMethodTests.java
index 1f34127..e64542a 100644
--- a/src/test/java/org/zwobble/couscous/tests/BackendMethodTests.java
+++ b/src/test/java/org/zwobble/couscous/tests/BackendMethodTests.java
@@ -20,8 +20,8 @@ import static org.zwobble.couscous.ast.FormalArgumentNode.formalArg;
import static org.zwobble.couscous.ast.IfStatementNode.ifStatement;
import static org.zwobble.couscous.ast.LiteralNode.literal;
import static org.zwobble.couscous.ast.LocalVariableDeclarationNode.localVariableDeclaration;
-import static org.zwobble.couscous.ast.MethodCallNode.integerAdd;
-import static org.zwobble.couscous.ast.MethodCallNode.notEqual;
+import static org.zwobble.couscous.ast.Operations.integerAdd;
+import static org.zwobble.couscous.ast.Operations.notEqual;
import static org.zwobble.couscous.ast.MethodNode.staticMethod;
import static org.zwobble.couscous.ast.ReturnNode.returns;
import static org.zwobble.couscous.ast.VariableDeclaration.var;
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 fc27d75..901c1a7 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
@@ -27,6 +27,7 @@ import static org.zwobble.couscous.ast.IfStatementNode.ifStatement;
import static org.zwobble.couscous.ast.LiteralNode.literal;
import static org.zwobble.couscous.ast.LocalVariableDeclarationNode.localVariableDeclaration;
import static org.zwobble.couscous.ast.MethodCallNode.*;
+import static org.zwobble.couscous.ast.Operations.*;
import static org.zwobble.couscous.ast.ReturnNode.returns;
import static org.zwobble.couscous.ast.StaticMethodCallNode.*;
import static org.zwobble.couscous.ast.TernaryConditionalNode.ternaryConditional;