aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-01-16 14:38:01 +0000
committerMichael Williamson <mike@zwobble.org>2016-01-16 14:38:01 +0000
commit1825bb87182562003d223c0c74f110406eea36cc (patch)
tree3d397fde5394766564554955f87c3f8e65515f2b /src
parent22f9f981f19b6751ea5697f2e81a557cc52d26d9 (diff)
Extract C# serialization of methods
Diffstat (limited to 'src')
-rw-r--r--src/main/java/org/zwobble/couscous/backends/csharp/CsharpBackend.java7
-rw-r--r--src/main/java/org/zwobble/couscous/backends/csharp/CsharpSerializer.java20
-rw-r--r--src/test/java/org/zwobble/couscous/tests/backends/csharp/CsharpSerializerTests.java16
3 files changed, 35 insertions, 8 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 d69edf6..3b69341 100644
--- a/src/main/java/org/zwobble/couscous/backends/csharp/CsharpBackend.java
+++ b/src/main/java/org/zwobble/couscous/backends/csharp/CsharpBackend.java
@@ -6,7 +6,6 @@ import com.google.common.io.Resources;
import org.zwobble.couscous.Backend;
import org.zwobble.couscous.ast.ClassNode;
import org.zwobble.couscous.ast.MethodNode;
-import org.zwobble.couscous.ast.ReturnNode;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
@@ -62,10 +61,6 @@ public class CsharpBackend implements Backend {
}
private String compileMethod(MethodNode method) {
- ReturnNode returnNode = (ReturnNode) method.getBody().get(0);
- return
- "public static dynamic " + method.getName() + "() {" +
- CsharpSerializer.serialize(returnNode, namespace) +
- "}";
+ return CsharpSerializer.serialize(method, 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 31a7b23..8f7e137 100644
--- a/src/main/java/org/zwobble/couscous/backends/csharp/CsharpSerializer.java
+++ b/src/main/java/org/zwobble/couscous/backends/csharp/CsharpSerializer.java
@@ -155,8 +155,24 @@ public class CsharpSerializer implements NodeVisitor {
}
@Override
- public void visit(MethodNode methodNode) {
- throw new UnsupportedOperationException();
+ 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.writeSpace();
+ writer.writeSymbol("{");
+ for (StatementNode statement : method.getBody()) {
+ writer.writeSymbol("\n ");
+ write(statement);
+ }
+ writer.writeSymbol("\n");
+ writer.writeSymbol("}");
}
@Override
diff --git a/src/test/java/org/zwobble/couscous/tests/backends/csharp/CsharpSerializerTests.java b/src/test/java/org/zwobble/couscous/tests/backends/csharp/CsharpSerializerTests.java
index 9425d55..51f4386 100644
--- a/src/test/java/org/zwobble/couscous/tests/backends/csharp/CsharpSerializerTests.java
+++ b/src/test/java/org/zwobble/couscous/tests/backends/csharp/CsharpSerializerTests.java
@@ -1,6 +1,7 @@
package org.zwobble.couscous.tests.backends.csharp;
import org.junit.Test;
+import org.zwobble.couscous.ast.MethodNode;
import org.zwobble.couscous.ast.Node;
import org.zwobble.couscous.ast.TypeName;
import org.zwobble.couscous.backends.csharp.CsharpSerializer;
@@ -43,6 +44,21 @@ public class CsharpSerializerTests {
assertEquals("return true;", output);
}
+ @Test
+ public void methodHasDynamicReturnType() {
+ String output = serialize(MethodNode.staticMethod("nothing").build());
+ assertEquals("internal static dynamic nothing() {\n}", output);
+ }
+
+ @Test
+ public void methodHasSerializedBody() {
+ MethodNode method = MethodNode.staticMethod("nothing")
+ .statement(returns(literal(true)))
+ .build();
+ String output = serialize(method);
+ assertEquals("internal static dynamic nothing() {\n return true;\n}", output);
+ }
+
private String serialize(Node node) {
return CsharpSerializer.serialize(node, "Couscous");
}