aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main/java/org/zwobble/couscous/backends/SourceCodeWriter.java7
-rw-r--r--src/main/java/org/zwobble/couscous/backends/csharp/CsharpSerializer.java10
-rw-r--r--src/test/java/org/zwobble/couscous/tests/backends/csharp/CsharpSerializerTests.java13
3 files changed, 29 insertions, 1 deletions
diff --git a/src/main/java/org/zwobble/couscous/backends/SourceCodeWriter.java b/src/main/java/org/zwobble/couscous/backends/SourceCodeWriter.java
index 3908f72..393cdc2 100644
--- a/src/main/java/org/zwobble/couscous/backends/SourceCodeWriter.java
+++ b/src/main/java/org/zwobble/couscous/backends/SourceCodeWriter.java
@@ -93,6 +93,13 @@ public class SourceCodeWriter {
action.run(this);
}
+ public <T> void writeCommaSeparated(Iterable<T> values, Consumer<T> writeValue) {
+ writeWithSeparator(values, writeValue, () -> {
+ writeSymbol(",");
+ writeSpace();
+ });
+ }
+
public <T> void writeWithSeparator(Iterable<T> values, Consumer<T> writeValue, Action separator) {
Iterator<T> iterator = values.iterator();
if (iterator.hasNext()) {
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 e7ac3d7..499121c 100644
--- a/src/main/java/org/zwobble/couscous/backends/csharp/CsharpSerializer.java
+++ b/src/main/java/org/zwobble/couscous/backends/csharp/CsharpSerializer.java
@@ -88,7 +88,15 @@ public class CsharpSerializer implements NodeVisitor {
@Override
public void visit(ArrayNode array) {
- throw new UnsupportedOperationException();
+ writer.writeKeyword("new");
+ writer.writeSpace();
+ writeTypeReference(array.getElementType());
+ writer.writeSymbol("[");
+ writer.writeSymbol("]");
+ writer.writeSpace();
+ writer.writeSymbol("{");
+ writer.writeCommaSeparated(array.getElements(), this::write);
+ 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 5c1044d..51cbeae 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
@@ -8,6 +8,7 @@ import org.zwobble.couscous.tests.TestIds;
import org.zwobble.couscous.types.Types;
import static org.junit.Assert.assertEquals;
+import static org.zwobble.couscous.ast.ArrayNode.array;
import static org.zwobble.couscous.ast.AssignmentNode.assign;
import static org.zwobble.couscous.ast.ConstructorCallNode.constructorCall;
import static org.zwobble.couscous.ast.ExpressionStatementNode.expressionStatement;
@@ -68,6 +69,18 @@ public class CsharpSerializerTests {
}
@Test
+ public void emptyArraySpecifiesTypeOfArray() {
+ String output = serialize(array(ScalarType.of("X"), list()));
+ assertEquals("new X[] {}", output);
+ }
+
+ @Test
+ public void arrayElementsAreSeparatedByComma() {
+ String output = serialize(array(ScalarType.of("X"), list(literal(1), literal(2))));
+ assertEquals("new X[] {1, 2}", output);
+ }
+
+ @Test
public void assignmentSeparatesTargetAndValueWithEqualsSign() {
String output = serialize(assign(
reference(var(TestIds.ANY_ID, "x", Types.BOOLEAN)),