aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/org')
-rw-r--r--src/main/java/org/zwobble/couscous/backends/csharp/CsharpSerializer.java41
1 files changed, 16 insertions, 25 deletions
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 81c5b78..c8b4254 100644
--- a/src/main/java/org/zwobble/couscous/backends/csharp/CsharpSerializer.java
+++ b/src/main/java/org/zwobble/couscous/backends/csharp/CsharpSerializer.java
@@ -3,6 +3,7 @@ package org.zwobble.couscous.backends.csharp;
import org.zwobble.couscous.ast.*;
import org.zwobble.couscous.ast.visitors.NodeVisitor;
import org.zwobble.couscous.backends.SourceCodeWriter;
+import org.zwobble.couscous.util.Action;
import org.zwobble.couscous.values.PrimitiveValueVisitor;
import org.zwobble.couscous.values.UnitValue;
@@ -301,45 +302,35 @@ public class CsharpSerializer implements NodeVisitor {
@Override
public void visit(ClassNode classNode) {
- writer.writeStatement(() -> {
- writer.writeKeyword("namespace");
- writer.writeSpace();
- writer.writeIdentifier(classNode.getName().getPackage().get());
- writer.startBlock();
- writer.writeStatement(() -> {
- writer.writeKeyword("internal");
- writer.writeSpace();
- writer.writeKeyword("class");
- writer.writeSpace();
- writer.writeIdentifier(classNode.getSimpleName());
- writer.startBlock();
- writeAll(classNode.getFields());
- writeStaticConstructor(classNode);
- writeConstructor(classNode, classNode.getConstructor());
- writeAll(classNode.getMethods());
- writer.endBlock();
- });
-
- writer.endBlock();
+ writeType(classNode, "class", () -> {
+ writeAll(classNode.getFields());
+ writeStaticConstructor(classNode);
+ writeConstructor(classNode, classNode.getConstructor());
+ writeAll(classNode.getMethods());
});
}
@Override
public void visit(InterfaceNode interfaceNode) {
- // TODO: factor out duplication with visit(ClassNode)
+ writeType(interfaceNode, "interface", () -> {
+ writeAll(interfaceNode.getMethods());
+ });
+ }
+
+ private void writeType(TypeNode node, String keyword, Action writeBody) {
writer.writeStatement(() -> {
writer.writeKeyword("namespace");
writer.writeSpace();
- writer.writeIdentifier(interfaceNode.getName().getPackage().get());
+ writer.writeIdentifier(node.getName().getPackage().get());
writer.startBlock();
writer.writeStatement(() -> {
writer.writeKeyword("internal");
writer.writeSpace();
- writer.writeKeyword("interface");
+ writer.writeKeyword(keyword);
writer.writeSpace();
- writer.writeIdentifier(interfaceNode.getName().getSimpleName());
+ writer.writeIdentifier(node.getName().getSimpleName());
writer.startBlock();
- writeAll(interfaceNode.getMethods());
+ writeBody.run();
writer.endBlock();
});