aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-01-15 17:48:10 +0000
committerMichael Williamson <mike@zwobble.org>2016-01-15 17:48:10 +0000
commit7663b33d174cbdef3dd88364b1854aadee74f8aa (patch)
treee2cad8f7ef9be7858a79f514a17f7bbfbad3e5b6 /src/main/java/org
parent9e02cd1b62dafa955aec4e5835c9dd64dec2f7d0 (diff)
Implement literal evaluation in C#
Diffstat (limited to 'src/main/java/org')
-rw-r--r--src/main/java/org/zwobble/couscous/backends/csharp/CsharpBackend.java20
1 files changed, 13 insertions, 7 deletions
diff --git a/src/main/java/org/zwobble/couscous/backends/csharp/CsharpBackend.java b/src/main/java/org/zwobble/couscous/backends/csharp/CsharpBackend.java
index f8a2d50..adf306f 100644
--- a/src/main/java/org/zwobble/couscous/backends/csharp/CsharpBackend.java
+++ b/src/main/java/org/zwobble/couscous/backends/csharp/CsharpBackend.java
@@ -1,5 +1,6 @@
package org.zwobble.couscous.backends.csharp;
+import com.google.common.collect.Iterables;
import org.zwobble.couscous.Backend;
import org.zwobble.couscous.ast.*;
import org.zwobble.couscous.ast.visitors.ExpressionNodeMapper;
@@ -11,6 +12,7 @@ import java.nio.file.Path;
import java.util.List;
import static com.google.common.collect.Iterables.transform;
+import static org.zwobble.couscous.util.ExtraLists.list;
public class CsharpBackend implements Backend {
private final Path directoryPath;
@@ -25,10 +27,14 @@ public class CsharpBackend implements Backend {
public void compile(List<ClassNode> classes) throws IOException {
Files.write(
directoryPath.resolve("Program.cs"),
- transform(
- classes,
- classNode -> compileClass(classNode)
- ));
+ Iterables.concat(
+ transform(
+ classes,
+ classNode -> compileClass(classNode)),
+ list(
+ "namespace " + namespace + ".java.lang {" +
+ " internal class String { }" +
+ "}")));
}
private String compileClass(ClassNode classNode) {
@@ -37,7 +43,7 @@ public class CsharpBackend implements Backend {
.map(packageName -> packageName + ".")
.orElse("");
return "namespace " + namespace + " {" +
- " public class " + classNode.getSimpleName() + " {" +
+ " internal class " + classNode.getSimpleName() + " {" +
String.join("\n", transform(classNode.getMethods(), method -> compileMethod(method))) +
" }" +
"}";
@@ -46,7 +52,7 @@ public class CsharpBackend implements Backend {
private String compileMethod(MethodNode method) {
ReturnNode returnNode = (ReturnNode) method.getBody().get(0);
return
- "public static string " + method.getName() + "() {" +
+ "public static dynamic " + method.getName() + "() {" +
" return " + compileExpression(returnNode.getValue()) + ";" +
"}";
}
@@ -79,7 +85,7 @@ public class CsharpBackend implements Backend {
@Override
public String visitType(TypeName value) {
- throw new UnsupportedOperationException();
+ return "typeof(" + namespace + "." + value.getQualifiedName() + ")";
}
});
}