aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-01-16 15:51:06 +0000
committerMichael Williamson <mike@zwobble.org>2016-01-16 15:51:06 +0000
commit11627e103110f1abfe6de7f391f6c90475ca888c (patch)
treefd661e497518fcd3e259a04d0fd9c94d8feeb3fc /src/main/java/org/zwobble
parentd2c8f4478ad23e7a2a01773bdd5a6333f8d56c7d (diff)
Implement non-dynamic return types in C# backend
Diffstat (limited to 'src/main/java/org/zwobble')
-rw-r--r--src/main/java/org/zwobble/couscous/ast/ClassNodeBuilder.java9
-rw-r--r--src/main/java/org/zwobble/couscous/ast/MethodNode.java5
-rw-r--r--src/main/java/org/zwobble/couscous/backends/csharp/CsharpSerializer.java11
3 files changed, 20 insertions, 5 deletions
diff --git a/src/main/java/org/zwobble/couscous/ast/ClassNodeBuilder.java b/src/main/java/org/zwobble/couscous/ast/ClassNodeBuilder.java
index b41c972..f1240f6 100644
--- a/src/main/java/org/zwobble/couscous/ast/ClassNodeBuilder.java
+++ b/src/main/java/org/zwobble/couscous/ast/ClassNodeBuilder.java
@@ -2,6 +2,7 @@ package org.zwobble.couscous.ast;
import com.google.common.collect.ImmutableList;
import org.zwobble.couscous.ast.identifiers.Identifier;
+import org.zwobble.couscous.values.UnitValue;
import java.util.Optional;
import java.util.function.Function;
@@ -21,7 +22,6 @@ public class ClassNodeBuilder {
this.fields = ImmutableList.builder();
this.constructor = Optional.empty();
this.methods = ImmutableList.builder();
-
}
public ClassNodeBuilder(String name) {
@@ -76,6 +76,7 @@ public class ClassNodeBuilder {
.isStatic(isStatic)
.annotations(builder.annotations.build())
.arguments(builder.arguments.build())
+ .returns(builder.returnType)
.body(builder.statements.build())
.build());
}
@@ -93,6 +94,7 @@ public class ClassNodeBuilder {
private final Function<MethodBuilder<?>, T> build;
private final ImmutableList.Builder<AnnotationNode> annotations;
private final ImmutableList.Builder<FormalArgumentNode> arguments;
+ private TypeName returnType = UnitValue.REF;
private final ImmutableList.Builder<StatementNode> statements;
public MethodBuilder(Function<MethodBuilder<?>, T> build) {
@@ -115,6 +117,11 @@ public class ClassNodeBuilder {
arguments.add(formalArg(var(id, name, type)));
return this;
}
+
+ public MethodBuilder<T> returns(TypeName returnType) {
+ this.returnType = returnType;
+ return this;
+ }
public MethodBuilder<T> argument(FormalArgumentNode argument) {
arguments.add(argument);
diff --git a/src/main/java/org/zwobble/couscous/ast/MethodNode.java b/src/main/java/org/zwobble/couscous/ast/MethodNode.java
index d67bb1e..5ee3a7d 100644
--- a/src/main/java/org/zwobble/couscous/ast/MethodNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/MethodNode.java
@@ -51,6 +51,11 @@ public class MethodNode implements CallableNode {
this.arguments.addAll(arguments);
return this;
}
+
+ public Builder returns(TypeName returnType) {
+ this.returnType = returnType;
+ return this;
+ }
public Builder statement(StatementNode statement) {
this.body.add(statement);
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 ef13854..1d05081 100644
--- a/src/main/java/org/zwobble/couscous/backends/csharp/CsharpSerializer.java
+++ b/src/main/java/org/zwobble/couscous/backends/csharp/CsharpSerializer.java
@@ -4,15 +4,18 @@ import com.google.common.collect.ImmutableMap;
import org.zwobble.couscous.ast.*;
import org.zwobble.couscous.ast.visitors.NodeVisitor;
import org.zwobble.couscous.backends.SourceCodeWriter;
-import org.zwobble.couscous.values.IntegerValue;
-import org.zwobble.couscous.values.PrimitiveValueVisitor;
+import org.zwobble.couscous.values.*;
import java.util.List;
import java.util.Map;
public class CsharpSerializer implements NodeVisitor {
private final static Map<TypeName, String> PRIMITIVES = ImmutableMap.of(
- IntegerValue.REF, "int");
+ IntegerValue.REF, "int",
+ StringValue.REF, "string",
+ BooleanValue.REF, "bool",
+ ObjectValues.CLASS, "System.Type",
+ UnitValue.REF, "void");
public static String serialize(Node node, String namespace) {
SourceCodeWriter writer = new SourceCodeWriter(
@@ -202,7 +205,7 @@ public class CsharpSerializer implements NodeVisitor {
writer.writeKeyword("static");
writer.writeSpace();
}
- writer.writeKeyword("dynamic");
+ writeTypeReference(method.getReturnType());
writer.writeSpace();
writer.writeIdentifier(method.getName());
writer.writeSymbol("(");