diff options
| author | Michael Williamson <mike@zwobble.org> | 2016-01-15 17:48:10 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2016-01-15 17:48:10 +0000 |
| commit | 7663b33d174cbdef3dd88364b1854aadee74f8aa (patch) | |
| tree | e2cad8f7ef9be7858a79f514a17f7bbfbad3e5b6 /src/main/java/org | |
| parent | 9e02cd1b62dafa955aec4e5835c9dd64dec2f7d0 (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.java | 20 |
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() + ")"; } }); } |
