aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/couscous/backends/csharp/CsharpSerializer.java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-01-16 14:29:40 +0000
committerMichael Williamson <mike@zwobble.org>2016-01-16 14:29:40 +0000
commitee11b2bc0f6bf76a483775bc2c825757ea295c85 (patch)
tree1c98449d81557c120fb23d4487c5ce85fd1cfac9 /src/main/java/org/zwobble/couscous/backends/csharp/CsharpSerializer.java
parentc09802a7da260d04809471fd1526a83e488fe3fb (diff)
Split out C# serializer
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.java173
1 files changed, 173 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
new file mode 100644
index 0000000..b8d81ad
--- /dev/null
+++ b/src/main/java/org/zwobble/couscous/backends/csharp/CsharpSerializer.java
@@ -0,0 +1,173 @@
+package org.zwobble.couscous.backends.csharp;
+
+import org.zwobble.couscous.ast.*;
+import org.zwobble.couscous.ast.visitors.NodeVisitor;
+import org.zwobble.couscous.values.PrimitiveValueVisitor;
+
+public class CsharpSerializer implements NodeVisitor {
+ public static String serialize(Node node, String namespace) {
+ CsharpWriter writer = new CsharpWriter();
+ CsharpSerializer serializer = new CsharpSerializer(writer, namespace);
+ serializer.write(node);
+ return writer.asString();
+ }
+
+ private final CsharpWriter writer;
+ private final String namespace;
+
+ private CsharpSerializer(CsharpWriter writer, String namespace) {
+ this.writer = writer;
+ this.namespace = namespace;
+ }
+
+ private void write(Node node) {
+ node.accept(this);
+ }
+
+ @Override
+ public void visit(LiteralNode literal) {
+ literal.getValue().accept(new PrimitiveValueVisitor<Void>() {
+ @Override
+ public Void visitInteger(int value) {
+ writer.writeIntegerLiteral(value);
+ return null;
+ }
+
+ @Override
+ public Void visitString(String value) {
+ writer.writeStringLiteral(value);
+ return null;
+ }
+
+ @Override
+ public Void visitBoolean(boolean value) {
+ writer.writeBooleanLiteral(value);
+ return null;
+ }
+
+ @Override
+ public Void visitUnit() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public Void visitType(TypeName value) {
+ writer.writeKeyword("typeof");
+ writer.writeSymbol("(");
+ writer.writeIdentifier(namespace + "." + value.getQualifiedName());
+ writer.writeSymbol(")");
+ return null;
+ }
+ });
+ }
+
+ @Override
+ public void visit(VariableReferenceNode variableReference) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void visit(ThisReferenceNode reference) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void visit(AssignmentNode assignment) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void visit(TernaryConditionalNode ternaryConditional) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void visit(MethodCallNode methodCall) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void visit(ConstructorCallNode call) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void visit(FieldAccessNode fieldAccess) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void visit(TypeCoercionNode typeCoercion) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void visit(CastNode cast) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void visit(InstanceReceiver receiver) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void visit(StaticReceiver receiver) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void visit(ReturnNode returnNode) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void visit(ExpressionStatementNode expressionStatement) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void visit(LocalVariableDeclarationNode localVariableDeclaration) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void visit(IfStatementNode ifStatement) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void visit(WhileNode whileLoop) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void visit(FormalArgumentNode formalArgumentNode) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void visit(AnnotationNode annotation) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void visit(MethodNode methodNode) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void visit(ConstructorNode constructorNode) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void visit(FieldDeclarationNode declaration) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void visit(ClassNode classNode) {
+ throw new UnsupportedOperationException();
+ }
+}