aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-02-28 14:01:30 +0000
committerMichael Williamson <mike@zwobble.org>2016-02-28 14:16:06 +0000
commit7d7da6b53bc79e24aa1a3ae9fe476181b3814c27 (patch)
treeab6d47aaf1a71be6e738100bff3fea031a0c3cf2 /src/main/java
parentd8abd198a39e7c5ba6df1b04359288d833913cf8 (diff)
Extract writeType
Diffstat (limited to 'src/main/java')
-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();
});