aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/couscous/backends/python/PrimitiveMethods.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/org/zwobble/couscous/backends/python/PrimitiveMethods.java')
-rw-r--r--src/main/java/org/zwobble/couscous/backends/python/PrimitiveMethods.java35
1 files changed, 34 insertions, 1 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 02db3b2..1da18f9 100644
--- a/src/main/java/org/zwobble/couscous/backends/python/PrimitiveMethods.java
+++ b/src/main/java/org/zwobble/couscous/backends/python/PrimitiveMethods.java
@@ -6,11 +6,14 @@ import java.util.Optional;
import org.zwobble.couscous.ast.TypeName;
import org.zwobble.couscous.backends.python.ast.PythonExpressionNode;
+import org.zwobble.couscous.values.IntegerValue;
import org.zwobble.couscous.values.StringValue;
import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableMap.Builder;
import static java.util.Arrays.asList;
+import static org.zwobble.couscous.backends.python.ast.PythonAttributeAccessNode.pythonAttributeAccess;
import static org.zwobble.couscous.backends.python.ast.PythonCallNode.pythonCall;
import static org.zwobble.couscous.backends.python.ast.PythonGetSliceNode.pythonGetSlice;
import static org.zwobble.couscous.backends.python.ast.PythonVariableReferenceNode.pythonVariableReference;
@@ -29,15 +32,45 @@ public class PrimitiveMethods {
.build();
+ private static final Map<String, PrimitiveMethodGenerator> INT_METHODS;
+
+ static {
+ ImmutableMap.Builder<String, PrimitiveMethodGenerator> methods = ImmutableMap.builder();
+
+ addMethod(methods, "add", "__add__");
+ addMethod(methods, "subtract", "__sub__");
+ addMethod(methods, "multiply", "__mul__");
+ addMethod(methods, "divide", "__floordiv__");
+ addMethod(methods, "mod", "__mod__");
+
+ addMethod(methods, "greaterThan", "__gt__");
+ addMethod(methods, "greaterThanOrEqual", "__ge__");
+ addMethod(methods, "lessThan", "__lt__");
+ addMethod(methods, "lessThanOrEqual", "__le__");
+
+ INT_METHODS = methods.build();
+ }
+
+ private static void addMethod(
+ Builder<String, PrimitiveMethodGenerator> methods,
+ String methodName,
+ String pythonMethodName) {
+ methods.put(methodName, (receiver, arguments) ->
+ pythonCall(
+ pythonAttributeAccess(receiver, pythonMethodName),
+ arguments));
+ }
+
private static final Map<TypeName, Map<String, PrimitiveMethodGenerator>> METHODS =
ImmutableMap.<TypeName, Map<String, PrimitiveMethodGenerator>>builder()
.put(StringValue.REF, STRING_METHODS)
+ .put(IntegerValue.REF, INT_METHODS)
.build();
public static boolean isPrimitive(TypeName type) {
return METHODS.containsKey(type);
}
-
+
public static Optional<PrimitiveMethodGenerator> getPrimitiveMethod(TypeName type, String methodName) {
return Optional.ofNullable(METHODS.get(type))
.flatMap(methodsForType -> Optional.ofNullable(methodsForType.get(methodName)));