From 92750efeeb8af18784024fab69b77e9a16074007 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sun, 31 Jul 2016 18:26:23 +0100 Subject: Add C# serialization for blocks --- src/main/java/org/zwobble/couscous/ast/StatementBlockNode.java | 4 ++++ .../org/zwobble/couscous/backends/csharp/CsharpSerializer.java | 6 ++++++ .../couscous/tests/backends/csharp/CsharpSerializerTests.java | 9 +++++++++ 3 files changed, 19 insertions(+) diff --git a/src/main/java/org/zwobble/couscous/ast/StatementBlockNode.java b/src/main/java/org/zwobble/couscous/ast/StatementBlockNode.java index 0c24295..79b092a 100644 --- a/src/main/java/org/zwobble/couscous/ast/StatementBlockNode.java +++ b/src/main/java/org/zwobble/couscous/ast/StatementBlockNode.java @@ -11,6 +11,10 @@ public class StatementBlockNode implements StatementNode { this.statements = statements; } + public List getStatements() { + return statements; + } + @Override public int type() { return NodeTypes.STATEMENT_BLOCK; 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 88ea37c..3e21f1b 100644 --- a/src/main/java/org/zwobble/couscous/backends/csharp/CsharpSerializer.java +++ b/src/main/java/org/zwobble/couscous/backends/csharp/CsharpSerializer.java @@ -426,6 +426,12 @@ public class CsharpSerializer { }); } + public void visit(StatementBlockNode block) { + writer.writeStatement(() -> { + writeBlock(block.getStatements()); + }); + } + public void visit(TryNode tryStatement) { writer.writeStatement(() -> { writer.writeKeyword("try"); 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 e3dc9ba..e5ddb02 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 @@ -338,6 +338,15 @@ public class CsharpSerializerTests { assertEquals("while (true) {\n return 1;\n}\n", output); } + @Test + public void statementBlockPrintsStatementsSurroundedByCurlyBraces() { + String output = serialize(new StatementBlockNode(list( + returns(literal(1)) + ))); + // TODO: remove leading space + assertEquals(" {\n return 1;\n}\n", output); + } + @Test public void tryStatementCanHaveBodyAndMultipleHandlers() { VariableDeclaration varX = var(TestIds.variable("x"), "x", ScalarType.of("X")); -- cgit v1.2.3