aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main/java/org/zwobble/couscous/backends/csharp/CsharpSerializer.java27
-rw-r--r--src/test/java/org/zwobble/couscous/tests/backends/csharp/CsharpSerializerTests.java12
2 files changed, 30 insertions, 9 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 63bb283..d33dafa 100644
--- a/src/main/java/org/zwobble/couscous/backends/csharp/CsharpSerializer.java
+++ b/src/main/java/org/zwobble/couscous/backends/csharp/CsharpSerializer.java
@@ -226,19 +226,28 @@ public class CsharpSerializer implements NodeVisitor {
@Override
public void visit(IfStatementNode ifStatement) {
writer.writeStatement(() -> {
- writer.writeKeyword("if");
- writer.writeSpace();
- writer.writeSymbol("(");
- write(ifStatement.getCondition());
- writer.writeSymbol(")");
+ writeIfContent(ifStatement);
+ });
+ }
+
+ private void writeIfContent(IfStatementNode ifStatement) {
+ writer.writeKeyword("if");
+ writer.writeSpace();
+ writer.writeSymbol("(");
+ write(ifStatement.getCondition());
+ writer.writeSymbol(")");
- writeBlock(ifStatement.getTrueBranch());
+ writeBlock(ifStatement.getTrueBranch());
- writer.writeSpace();
- writer.writeKeyword("else");
+ writer.writeSpace();
+ writer.writeKeyword("else");
+ if (ifStatement.getFalseBranch().size() == 1 && ifStatement.getFalseBranch().get(0) instanceof IfStatementNode) {
+ writer.writeSpace();
+ writeIfContent((IfStatementNode) ifStatement.getFalseBranch().get(0));
+ } else {
writeBlock(ifStatement.getFalseBranch());
- });
+ }
}
@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 51cbeae..89cb9c1 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
@@ -209,6 +209,18 @@ public class CsharpSerializerTests {
}
@Test
+ public void elseIfBranchesDontCauseNesting() {
+ String output = serialize(ifStatement(
+ literal(true),
+ list(returns(literal(1))),
+ list(ifStatement(
+ literal(false),
+ list(returns(literal(2))),
+ list(returns(literal(3)))))));
+ assertEquals("if (true) {\n return 1;\n} else if (false) {\n return 2;\n} else {\n return 3;\n}\n", output);
+ }
+
+ @Test
public void whileLoopPrintsConditionAndBody() {
String output = serialize(whileLoop(
literal(true),