diff options
| author | Michael Williamson <mike@zwobble.org> | 2016-01-16 15:23:01 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2016-01-16 15:23:01 +0000 |
| commit | 4197fcbcd7a54cc11231d80edd1d17effce9b1e9 (patch) | |
| tree | 7f382a0efd37545af512bcf7002edd9a16a233e8 /src/main/java | |
| parent | 1bab211fd6231ed99b84b764e8f78ac2be1272f8 (diff) | |
Implement basic method calls in C# backend
Diffstat (limited to 'src/main/java')
| -rw-r--r-- | src/main/java/org/zwobble/couscous/backends/csharp/CsharpSerializer.java | 41 |
1 files changed, 35 insertions, 6 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 702ad12..f034975 100644 --- a/src/main/java/org/zwobble/couscous/backends/csharp/CsharpSerializer.java +++ b/src/main/java/org/zwobble/couscous/backends/csharp/CsharpSerializer.java @@ -63,7 +63,7 @@ public class CsharpSerializer implements NodeVisitor { public Void visitType(TypeName value) { writer.writeKeyword("typeof"); writer.writeSymbol("("); - writer.writeIdentifier(namespace + "." + value.getQualifiedName()); + writeTypeReference(value); writer.writeSymbol(")"); return null; } @@ -100,12 +100,20 @@ public class CsharpSerializer implements NodeVisitor { @Override public void visit(MethodCallNode methodCall) { - throw new UnsupportedOperationException(); + write(methodCall.getReceiver()); + writer.writeSymbol("."); + writer.writeIdentifier(methodCall.getMethodName()); + writer.writeSymbol("("); + writer.writeSymbol(")"); } @Override public void visit(ConstructorCallNode call) { - throw new UnsupportedOperationException(); + writer.writeKeyword("new"); + writer.writeSpace(); + writeTypeReference(call.getType()); + writer.writeSymbol("("); + writer.writeSymbol(")"); } @Override @@ -125,7 +133,18 @@ public class CsharpSerializer implements NodeVisitor { @Override public void visit(InstanceReceiver receiver) { - throw new UnsupportedOperationException(); + receiver.accept(new Receiver.Mapper<Void>() { + @Override + public Void visit(ExpressionNode receiver) { + write(receiver); + return null; + } + + @Override + public Void visit(TypeName receiver) { + throw new UnsupportedOperationException(); + } + }); } @Override @@ -176,8 +195,10 @@ public class CsharpSerializer implements NodeVisitor { writer.writeStatement(() -> { writer.writeKeyword("internal"); writer.writeSpace(); - writer.writeKeyword("static"); - writer.writeSpace(); + if (method.isStatic()) { + writer.writeKeyword("static"); + writer.writeSpace(); + } writer.writeKeyword("dynamic"); writer.writeSpace(); writer.writeIdentifier(method.getName()); @@ -228,4 +249,12 @@ public class CsharpSerializer implements NodeVisitor { writer.endBlock(); } + + private void writeTypeReference(TypeName value) { + writer.writeIdentifier(typeReference(value)); + } + + private String typeReference(TypeName value) { + return namespace + "." + value.getQualifiedName(); + } } |
