aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/couscous/backends
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-03-21 08:13:45 +0000
committerMichael Williamson <mike@zwobble.org>2016-03-21 08:13:45 +0000
commitfe113241971cfe87b163a9eb4dc51e9d5e32410e (patch)
treef9e435c44020ffbbb9231df79719a4d407ea8000 /src/main/java/org/zwobble/couscous/backends
parent22f5765125eea28ae158bab4d9e96ae6472b73d4 (diff)
Move standard type definitions into a Types class
Diffstat (limited to 'src/main/java/org/zwobble/couscous/backends')
-rw-r--r--src/main/java/org/zwobble/couscous/backends/csharp/CsharpCodeGenerator.java13
-rw-r--r--src/main/java/org/zwobble/couscous/backends/csharp/CsharpPrimitiveMethods.java23
-rw-r--r--src/main/java/org/zwobble/couscous/backends/csharp/CsharpSerializer.java3
-rw-r--r--src/main/java/org/zwobble/couscous/backends/python/PythonCodeGenerator.java7
-rw-r--r--src/main/java/org/zwobble/couscous/backends/python/PythonPrimitiveMethods.java11
-rw-r--r--src/main/java/org/zwobble/couscous/backends/python/PythonSerializer.java1
6 files changed, 28 insertions, 30 deletions
diff --git a/src/main/java/org/zwobble/couscous/backends/csharp/CsharpCodeGenerator.java b/src/main/java/org/zwobble/couscous/backends/csharp/CsharpCodeGenerator.java
index dbfb00f..1b64293 100644
--- a/src/main/java/org/zwobble/couscous/backends/csharp/CsharpCodeGenerator.java
+++ b/src/main/java/org/zwobble/couscous/backends/csharp/CsharpCodeGenerator.java
@@ -5,7 +5,6 @@ import org.zwobble.couscous.ast.*;
import org.zwobble.couscous.ast.visitors.NodeTransformer;
import org.zwobble.couscous.backends.Names;
import org.zwobble.couscous.types.*;
-import org.zwobble.couscous.values.*;
import java.util.Map;
import java.util.Optional;
@@ -16,11 +15,11 @@ import static org.zwobble.couscous.util.ExtraLists.eagerMap;
public class CsharpCodeGenerator {
private final static Map<ScalarType, ScalarType> PRIMITIVES = ImmutableMap.<ScalarType, ScalarType>builder()
- .put(IntegerValue.REF, ScalarType.of("int"))
- .put(StringValue.REF, ScalarType.of("string"))
- .put(BooleanValue.REF, ScalarType.of("bool"))
- .put(ObjectValues.CLASS, ScalarType.of("System.Type"))
- .put(UnitValue.REF, ScalarType.of("void"))
+ .put(Types.INT, ScalarType.of("int"))
+ .put(Types.STRING, ScalarType.of("string"))
+ .put(Types.BOOLEAN, ScalarType.of("bool"))
+ .put(Types.CLASS, ScalarType.of("System.Type"))
+ .put(Types.VOID, ScalarType.of("void"))
.build();
private final String namespace;
@@ -61,7 +60,7 @@ public class CsharpCodeGenerator {
@Override
public Type visit(ParameterizedType type) {
- if (type.getRawType().equals(ObjectValues.CLASS)) {
+ if (type.getRawType().equals(Types.CLASS)) {
return ScalarType.of("System.Type");
} else {
return new ParameterizedType(
diff --git a/src/main/java/org/zwobble/couscous/backends/csharp/CsharpPrimitiveMethods.java b/src/main/java/org/zwobble/couscous/backends/csharp/CsharpPrimitiveMethods.java
index cb5b027..96f8c00 100644
--- a/src/main/java/org/zwobble/couscous/backends/csharp/CsharpPrimitiveMethods.java
+++ b/src/main/java/org/zwobble/couscous/backends/csharp/CsharpPrimitiveMethods.java
@@ -3,10 +3,7 @@ package org.zwobble.couscous.backends.csharp;
import com.google.common.collect.ImmutableMap;
import org.zwobble.couscous.ast.ExpressionNode;
import org.zwobble.couscous.types.ScalarType;
-import org.zwobble.couscous.values.BooleanValue;
-import org.zwobble.couscous.values.IntegerValue;
-import org.zwobble.couscous.values.ObjectValues;
-import org.zwobble.couscous.values.StringValue;
+import org.zwobble.couscous.types.Types;
import java.util.List;
import java.util.Map;
@@ -34,7 +31,7 @@ public class CsharpPrimitiveMethods {
receiver,
"ToString",
list(),
- StringValue.REF)));
+ Types.STRING)));
BOXED_INT_METHODS = methods.build();
}
@@ -42,7 +39,7 @@ public class CsharpPrimitiveMethods {
static {
ImmutableMap.Builder<String, PrimitiveMethodGenerator> methods = ImmutableMap.builder();
- methods.put("length", (receiver, arguments) -> fieldAccess(receiver, "Length", IntegerValue.REF));
+ methods.put("length", (receiver, arguments) -> fieldAccess(receiver, "Length", Types.INT));
methods.put("substring", (receiver, arguments) -> {
ExpressionNode startIndex = arguments.get(0);
ExpressionNode endIndex = arguments.get(1);
@@ -52,26 +49,26 @@ public class CsharpPrimitiveMethods {
receiver,
"Substring",
list(startIndex, length),
- StringValue.REF);
+ Types.STRING);
});
methods.put("toLowerCase", (receiver, arguments) -> methodCall(
receiver,
"ToLower",
list(),
- StringValue.REF));
+ Types.STRING));
methods.put("equals", (receiver, arguments) -> methodCall(
receiver,
"Equals",
arguments,
- StringValue.REF));
+ Types.STRING));
STRING_METHODS = methods.build();
}
private static final Map<ScalarType, Map<String, PrimitiveMethodGenerator>> METHODS =
ImmutableMap.<ScalarType, Map<String, PrimitiveMethodGenerator>>builder()
- .put(BooleanValue.REF, BOOLEAN_METHODS)
- .put(StringValue.REF, STRING_METHODS)
- .put(ObjectValues.BOXED_INT, BOXED_INT_METHODS)
+ .put(Types.BOOLEAN, BOOLEAN_METHODS)
+ .put(Types.STRING, STRING_METHODS)
+ .put(Types.BOXED_INT, BOXED_INT_METHODS)
.build();
private static final Map<String, PrimitiveStaticMethodGenerator> STATIC_INT_METHODS =
@@ -87,7 +84,7 @@ public class CsharpPrimitiveMethods {
private static final Map<ScalarType, Map<String, PrimitiveStaticMethodGenerator>> STATIC_METHODS =
ImmutableMap.<ScalarType, Map<String, PrimitiveStaticMethodGenerator>>builder()
- .put(ObjectValues.BOXED_INT, STATIC_INT_METHODS)
+ .put(Types.BOXED_INT, STATIC_INT_METHODS)
.build();
public static Optional<PrimitiveMethodGenerator> getPrimitiveMethod(ScalarType type, String methodName) {
diff --git a/src/main/java/org/zwobble/couscous/backends/csharp/CsharpSerializer.java b/src/main/java/org/zwobble/couscous/backends/csharp/CsharpSerializer.java
index 090a19a..9b168ef 100644
--- a/src/main/java/org/zwobble/couscous/backends/csharp/CsharpSerializer.java
+++ b/src/main/java/org/zwobble/couscous/backends/csharp/CsharpSerializer.java
@@ -6,7 +6,6 @@ import org.zwobble.couscous.backends.SourceCodeWriter;
import org.zwobble.couscous.types.*;
import org.zwobble.couscous.util.Action;
import org.zwobble.couscous.values.PrimitiveValue;
-import org.zwobble.couscous.values.UnitValue;
import java.util.List;
@@ -181,7 +180,7 @@ public class CsharpSerializer implements NodeVisitor {
public void visit(ReturnNode returnNode) {
writer.writeStatement(() -> {
writer.writeKeyword("return");
- if (!returnNode.getValue().getType().equals(UnitValue.REF)) {
+ if (!returnNode.getValue().getType().equals(Types.VOID)) {
writer.writeSpace();
write(returnNode.getValue());
}
diff --git a/src/main/java/org/zwobble/couscous/backends/python/PythonCodeGenerator.java b/src/main/java/org/zwobble/couscous/backends/python/PythonCodeGenerator.java
index 9e0a0b9..5b1691b 100644
--- a/src/main/java/org/zwobble/couscous/backends/python/PythonCodeGenerator.java
+++ b/src/main/java/org/zwobble/couscous/backends/python/PythonCodeGenerator.java
@@ -13,6 +13,7 @@ import org.zwobble.couscous.ast.visitors.NodeMapperWithDefault;
import org.zwobble.couscous.ast.visitors.StatementNodeMapper;
import org.zwobble.couscous.backends.Names;
import org.zwobble.couscous.backends.python.ast.*;
+import org.zwobble.couscous.types.Types;
import org.zwobble.couscous.values.*;
import java.util.*;
@@ -113,7 +114,7 @@ public class PythonCodeGenerator {
@Override
public Stream<ScalarType> visit(TypeCoercionNode typeCoercion) {
if (isIntegerBox(typeCoercion)) {
- return Stream.of(ObjectValues.BOXED_INT);
+ return Stream.of(Types.BOXED_INT);
} else {
return Stream.empty();
}
@@ -312,7 +313,7 @@ public class PythonCodeGenerator {
if (isIntegerBox(typeCoercion)) {
// TODO: perform this replacement at the start so that we don't split the import handling and actual expression
return visit(ConstructorCallNode.constructorCall(
- ObjectValues.BOXED_INT,
+ Types.BOXED_INT,
list(typeCoercion.getExpression())));
} else if (isIntegerUnbox(typeCoercion)) {
return pythonAttributeAccess(value, "_value");
@@ -353,7 +354,7 @@ public class PythonCodeGenerator {
}
private static boolean isInteger(Type type) {
- return type.equals(IntegerValue.REF) || type.equals(ObjectValues.BOXED_INT);
+ return type.equals(Types.INT) || type.equals(Types.BOXED_INT);
}
private static PythonVariableReferenceNode typeReference(Type className) {
diff --git a/src/main/java/org/zwobble/couscous/backends/python/PythonPrimitiveMethods.java b/src/main/java/org/zwobble/couscous/backends/python/PythonPrimitiveMethods.java
index a290c54..40c794e 100644
--- a/src/main/java/org/zwobble/couscous/backends/python/PythonPrimitiveMethods.java
+++ b/src/main/java/org/zwobble/couscous/backends/python/PythonPrimitiveMethods.java
@@ -7,6 +7,7 @@ import org.zwobble.couscous.types.ScalarType;
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.types.Types;
import org.zwobble.couscous.values.*;
import java.util.List;
@@ -112,10 +113,10 @@ public class PythonPrimitiveMethods {
private static final Map<ScalarType, Map<String, PrimitiveMethodGenerator>> METHODS =
ImmutableMap.<ScalarType, Map<String, PrimitiveMethodGenerator>>builder()
- .put(StringValue.REF, STRING_METHODS)
- .put(BooleanValue.REF, BOOLEAN_METHODS)
- .put(IntegerValue.REF, INT_METHODS)
- .put(ObjectValues.BOXED_INT, INT_METHODS)
+ .put(Types.STRING, STRING_METHODS)
+ .put(Types.BOOLEAN, BOOLEAN_METHODS)
+ .put(Types.INT, INT_METHODS)
+ .put(Types.BOXED_INT, INT_METHODS)
.build();
private static final Map<String, PrimitiveStaticMethodGenerator> INTERNAL_METHODS =
@@ -135,7 +136,7 @@ public class PythonPrimitiveMethods {
private static final Map<ScalarType, Map<String, PrimitiveStaticMethodGenerator>> STATIC_METHODS =
ImmutableMap.<ScalarType, Map<String, PrimitiveStaticMethodGenerator>>builder()
.put(InternalCouscousValue.REF, INTERNAL_METHODS)
- .put(ObjectValues.BOXED_INT, BOXED_INT_STATIC_METHODS)
+ .put(Types.BOXED_INT, BOXED_INT_STATIC_METHODS)
.build();
public static Optional<PrimitiveMethodGenerator> getPrimitiveMethod(ScalarType type, String methodName) {
diff --git a/src/main/java/org/zwobble/couscous/backends/python/PythonSerializer.java b/src/main/java/org/zwobble/couscous/backends/python/PythonSerializer.java
index 7732a87..89711a2 100644
--- a/src/main/java/org/zwobble/couscous/backends/python/PythonSerializer.java
+++ b/src/main/java/org/zwobble/couscous/backends/python/PythonSerializer.java
@@ -13,6 +13,7 @@ public class PythonSerializer implements PythonNodeVisitor {
);
PythonSerializer serializer = new PythonSerializer(writer);
serializer.write(node);
+ System.out.println(writer.asString());
return writer.asString();
}