diff options
| author | Michael Williamson <mike@zwobble.org> | 2016-07-15 14:34:15 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2016-07-15 14:34:15 +0100 |
| commit | 351567960bd825fbdd4a3f15719f7074a13cdfd3 (patch) | |
| tree | c9b70be8a2724d9849b0382ddda780d982044c81 /src/main/java/org/zwobble/couscous/backends/csharp/CsharpSerializer.java | |
| parent | bc06840e00425db342bc5a021c0900d9e63b71f0 (diff) | |
Generate switch statements in C# backend
Diffstat (limited to 'src/main/java/org/zwobble/couscous/backends/csharp/CsharpSerializer.java')
| -rw-r--r-- | src/main/java/org/zwobble/couscous/backends/csharp/CsharpSerializer.java | 32 |
1 files changed, 32 insertions, 0 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 91a4400..6164d04 100644 --- a/src/main/java/org/zwobble/couscous/backends/csharp/CsharpSerializer.java +++ b/src/main/java/org/zwobble/couscous/backends/csharp/CsharpSerializer.java @@ -2,6 +2,8 @@ package org.zwobble.couscous.backends.csharp; import com.google.common.collect.ImmutableSet; import org.zwobble.couscous.ast.*; +import org.zwobble.couscous.ast.sugar.SwitchCaseNode; +import org.zwobble.couscous.ast.sugar.SwitchNode; import org.zwobble.couscous.ast.visitors.DynamicNodeMapper; import org.zwobble.couscous.ast.visitors.DynamicNodeVisitor; import org.zwobble.couscous.backends.SourceCodeWriter; @@ -366,6 +368,36 @@ public class CsharpSerializer { } } + public void visit(SwitchNode switchNode) { + writer.writeStatement(() -> { + writer.writeKeyword("switch"); + writer.writeSpace(); + writer.writeSymbol("("); + write(switchNode.getValue()); + writer.writeSymbol(")"); + writer.startBlock(); + switchNode.getCases().forEach(this::visit); + writer.endBlock(); + }); + } + + private void visit(SwitchCaseNode switchCase) { + writer.writeStatement(() -> { + if (switchCase.getValue().isPresent()) { + writer.writeKeyword("case"); + writer.writeSpace(); + write(switchCase.getValue().get()); + } else { + writer.writeKeyword("default"); + } + writer.writeSymbol(":"); + }); + writer.indent(); + writeAll(switchCase.getStatements()); + writer.dedent(); + + } + public void visit(WhileNode whileLoop) { writer.writeStatement(() -> { writer.writeKeyword("while"); |
