aboutsummaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2015-11-21 14:33:25 +0000
committerMichael Williamson <mike@zwobble.org>2015-11-21 14:33:25 +0000
commit28e14eb8ce3186504dd8fa077cce55474384ec36 (patch)
tree3524b8be3805d86bee39bb0bcab663b14ca876ae /src/main
parentfa0e5ad5e621fb6a65ecc70a357bb20c14b0e796 (diff)
Use Python operators instead of methods for arithmetic operations
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/org/zwobble/couscous/backends/python/PrimitiveMethods.java30
-rw-r--r--src/main/java/org/zwobble/couscous/backends/python/PythonBackend.java1
2 files changed, 17 insertions, 14 deletions
diff --git a/src/main/java/org/zwobble/couscous/backends/python/PrimitiveMethods.java b/src/main/java/org/zwobble/couscous/backends/python/PrimitiveMethods.java
index 47f3bb7..0d6fd80 100644
--- a/src/main/java/org/zwobble/couscous/backends/python/PrimitiveMethods.java
+++ b/src/main/java/org/zwobble/couscous/backends/python/PrimitiveMethods.java
@@ -6,6 +6,7 @@ import java.util.Optional;
import org.zwobble.couscous.ast.Operator;
import org.zwobble.couscous.ast.TypeName;
+import org.zwobble.couscous.backends.python.ast.PythonBinaryOperation;
import org.zwobble.couscous.backends.python.ast.PythonExpressionNode;
import org.zwobble.couscous.backends.python.ast.PythonNotNode;
import org.zwobble.couscous.values.BooleanValue;
@@ -50,9 +51,9 @@ public class PrimitiveMethods {
static {
ImmutableMap.Builder<String, PrimitiveMethodGenerator> methods = ImmutableMap.builder();
- addMethod(methods, Operator.ADD.getMethodName(), "__add__");
- addMethod(methods, Operator.SUBTRACT.getMethodName(), "__sub__");
- addMethod(methods, Operator.MULTIPLY.getMethodName(), "__mul__");
+ addOperation(methods, Operator.ADD.getMethodName(), "+");
+ addOperation(methods, Operator.SUBTRACT.getMethodName(), "-");
+ addOperation(methods, Operator.MULTIPLY.getMethodName(), "*");
methods.put(Operator.DIVIDE.getMethodName(), (receiver, arguments) ->
pythonCall(
@@ -63,12 +64,12 @@ public class PrimitiveMethods {
internalReference("_mod_round_to_zero"),
asList(receiver, arguments.get(0))));
- addMethod(methods, Operator.EQUALS.getMethodName(), "__eq__");
- addMethod(methods, Operator.NOT_EQUALS.getMethodName(), "__ne__");
- addMethod(methods, Operator.GREATER_THAN.getMethodName(), "__gt__");
- addMethod(methods, Operator.GREATER_THAN_OR_EQUAL.getMethodName(), "__ge__");
- addMethod(methods, Operator.LESS_THAN.getMethodName(), "__lt__");
- addMethod(methods, Operator.LESS_THAN_OR_EQUAL.getMethodName(), "__le__");
+ addOperation(methods, Operator.EQUALS.getMethodName(), "==");
+ addOperation(methods, Operator.NOT_EQUALS.getMethodName(), "!=");
+ addOperation(methods, Operator.GREATER_THAN.getMethodName(), ">");
+ addOperation(methods, Operator.GREATER_THAN_OR_EQUAL.getMethodName(), ">=");
+ addOperation(methods, Operator.LESS_THAN.getMethodName(), "<");
+ addOperation(methods, Operator.LESS_THAN_OR_EQUAL.getMethodName(), "<=");
INT_METHODS = methods.build();
}
@@ -77,14 +78,15 @@ public class PrimitiveMethods {
return pythonAttributeAccess(pythonVariableReference("_couscous"), name);
}
- private static void addMethod(
+ private static void addOperation(
Builder<String, PrimitiveMethodGenerator> methods,
String methodName,
- String pythonMethodName) {
+ String operatorSymbol) {
methods.put(methodName, (receiver, arguments) ->
- pythonCall(
- pythonAttributeAccess(receiver, pythonMethodName),
- arguments));
+ new PythonBinaryOperation(
+ operatorSymbol,
+ receiver,
+ arguments.get(0)));
}
private static final Map<TypeName, Map<String, PrimitiveMethodGenerator>> METHODS =
diff --git a/src/main/java/org/zwobble/couscous/backends/python/PythonBackend.java b/src/main/java/org/zwobble/couscous/backends/python/PythonBackend.java
index 5cd55d2..f30beed 100644
--- a/src/main/java/org/zwobble/couscous/backends/python/PythonBackend.java
+++ b/src/main/java/org/zwobble/couscous/backends/python/PythonBackend.java
@@ -6,6 +6,7 @@ import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.List;
+import java.util.stream.Stream;
import org.zwobble.couscous.Backend;
import org.zwobble.couscous.ast.ClassNode;