aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/zwobble/couscous/backends/csharp/CsharpBackend.java15
-rw-r--r--src/main/java/org/zwobble/couscous/backends/csharp/CsharpSerializer.java55
2 files changed, 41 insertions, 29 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 3b69341..b92e683 100644
--- a/src/main/java/org/zwobble/couscous/backends/csharp/CsharpBackend.java
+++ b/src/main/java/org/zwobble/couscous/backends/csharp/CsharpBackend.java
@@ -5,7 +5,6 @@ import com.google.common.collect.Iterables;
import com.google.common.io.Resources;
import org.zwobble.couscous.Backend;
import org.zwobble.couscous.ast.ClassNode;
-import org.zwobble.couscous.ast.MethodNode;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
@@ -49,18 +48,6 @@ public class CsharpBackend implements Backend {
}
private String compileClass(ClassNode classNode) {
- String namespace = this.namespace +
- classNode.getName().getPackage()
- .map(packageName -> packageName + ".")
- .orElse("");
- return "namespace " + namespace + " {" +
- " internal class " + classNode.getSimpleName() + " {" +
- String.join("\n", transform(classNode.getMethods(), method -> compileMethod(method))) +
- " }" +
- "}";
- }
-
- private String compileMethod(MethodNode method) {
- return CsharpSerializer.serialize(method, namespace);
+ return CsharpSerializer.serialize(classNode, namespace);
}
}
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 72160d3..360fea1 100644
--- a/src/main/java/org/zwobble/couscous/backends/csharp/CsharpSerializer.java
+++ b/src/main/java/org/zwobble/couscous/backends/csharp/CsharpSerializer.java
@@ -165,20 +165,22 @@ public class CsharpSerializer implements NodeVisitor {
@Override
public void visit(MethodNode method) {
- writer.writeKeyword("internal");
- writer.writeSpace();
- writer.writeKeyword("static");
- writer.writeSpace();
- writer.writeKeyword("dynamic");
- writer.writeSpace();
- writer.writeIdentifier(method.getName());
- writer.writeSymbol("(");
- writer.writeSymbol(")");
- writer.startBlock();
- for (StatementNode statement : method.getBody()) {
- writer.writeStatement(() -> write(statement));
- }
- writer.endBlock();
+ writer.writeStatement(() -> {
+ writer.writeKeyword("internal");
+ writer.writeSpace();
+ writer.writeKeyword("static");
+ writer.writeSpace();
+ writer.writeKeyword("dynamic");
+ writer.writeSpace();
+ writer.writeIdentifier(method.getName());
+ writer.writeSymbol("(");
+ writer.writeSymbol(")");
+ writer.startBlock();
+ for (StatementNode statement : method.getBody()) {
+ writer.writeStatement(() -> write(statement));
+ }
+ writer.endBlock();
+ });
}
@Override
@@ -193,6 +195,29 @@ public class CsharpSerializer implements NodeVisitor {
@Override
public void visit(ClassNode classNode) {
- throw new UnsupportedOperationException();
+ String namespace = this.namespace +
+ classNode.getName().getPackage()
+ .map(packageName -> "." + packageName)
+ .orElse("");
+ writer.writeKeyword("namespace");
+ writer.writeSpace();
+ writer.writeIdentifier(namespace);
+ writer.startBlock();
+ writer.writeStatement(() -> {
+ writer.writeKeyword("internal");
+ writer.writeSpace();
+ writer.writeKeyword("class");
+ writer.writeSpace();
+ writer.writeIdentifier(classNode.getSimpleName());
+ writer.startBlock();
+
+ for (MethodNode method : classNode.getMethods()) {
+ write(method);
+ }
+
+ writer.endBlock();
+ });
+
+ writer.endBlock();
}
}