diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/main/java/org/zwobble/couscous/backends/csharp/CsharpSerializer.java | 27 | ||||
| -rw-r--r-- | src/test/java/org/zwobble/couscous/tests/backends/csharp/CsharpSerializerTests.java | 12 |
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), |
