aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-03-18 20:08:39 +0000
committerMichael Williamson <mike@zwobble.org>2016-03-18 20:08:39 +0000
commitb1427f80b354538333d9656683fa2bc5a41fe2a6 (patch)
treed1437f4711aaf8e73902e5272388e2ec410e6e43 /src/main/java/org
parenta975bb84a99ee6f4e4b4a446642206ba5a7a69c9 (diff)
Improve generics support on C# backend
Diffstat (limited to 'src/main/java/org')
-rw-r--r--src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java22
-rw-r--r--src/main/java/org/zwobble/couscous/interpreter/types/UserDefinedInterpreterType.java5
-rw-r--r--src/main/java/org/zwobble/couscous/values/ObjectValues.java1
-rw-r--r--src/main/java/org/zwobble/couscous/values/UnitValue.java2
4 files changed, 16 insertions, 14 deletions
diff --git a/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java b/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java
index 42d8f28..f0d42d4 100644
--- a/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java
+++ b/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java
@@ -12,6 +12,7 @@ import org.zwobble.couscous.ast.types.ScalarType;
import org.zwobble.couscous.ast.types.Type;
import org.zwobble.couscous.ast.visitors.NodeTransformer;
import org.zwobble.couscous.util.ExtraLists;
+import org.zwobble.couscous.values.ObjectValues;
import java.io.IOException;
import java.nio.file.Path;
@@ -26,6 +27,7 @@ import static java.util.Collections.emptyList;
import static org.zwobble.couscous.ast.AnnotationNode.annotation;
import static org.zwobble.couscous.ast.AssignmentNode.assignStatement;
import static org.zwobble.couscous.ast.ConstructorNode.constructor;
+import static org.zwobble.couscous.ast.ExpressionStatementNode.expressionStatement;
import static org.zwobble.couscous.ast.FieldAccessNode.fieldAccess;
import static org.zwobble.couscous.ast.FieldDeclarationNode.field;
import static org.zwobble.couscous.ast.FormalTypeParameterNode.formalTypeParameter;
@@ -405,21 +407,23 @@ public class JavaReader {
override -> !override.equals(methodNode.signature())),
override -> {
List<FormalArgumentNode> arguments = eagerMap(override.getArguments(), argument -> scope.formalArgument("arg", argument));
+ MethodCallNode call = MethodCallNode.methodCall(
+ thisReference(type),
+ methodNode.getName(),
+ eagerMap(arguments, argument -> reference(argument)),
+ methodNode.signature());
+
+ StatementNode body = override.getReturnType().equals(ObjectValues.VOID)
+ ? expressionStatement(call)
+ : returns(typeCoercion(call, override.getReturnType()));
+
return MethodNode.method(
methodNode.getAnnotations(),
methodNode.isStatic(),
methodNode.getName(),
arguments,
override.getReturnType(),
- Optional.of(list(
- returns(typeCoercion(
- MethodCallNode.methodCall(
- thisReference(type),
- methodNode.getName(),
- eagerMap(arguments, argument -> reference(argument)),
- methodNode.signature()),
- override.getReturnType()))
- )));
+ Optional.of(list(body)));
});
}
diff --git a/src/main/java/org/zwobble/couscous/interpreter/types/UserDefinedInterpreterType.java b/src/main/java/org/zwobble/couscous/interpreter/types/UserDefinedInterpreterType.java
index 6d596ee..32d9018 100644
--- a/src/main/java/org/zwobble/couscous/interpreter/types/UserDefinedInterpreterType.java
+++ b/src/main/java/org/zwobble/couscous/interpreter/types/UserDefinedInterpreterType.java
@@ -12,10 +12,7 @@ import org.zwobble.couscous.interpreter.errors.WrongNumberOfArguments;
import org.zwobble.couscous.interpreter.values.InterpreterValue;
import org.zwobble.couscous.interpreter.values.ObjectInterpreterValue;
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
-import java.util.Set;
+import java.util.*;
import static com.google.common.collect.Iterables.filter;
import static org.zwobble.couscous.util.Casts.tryCast;
diff --git a/src/main/java/org/zwobble/couscous/values/ObjectValues.java b/src/main/java/org/zwobble/couscous/values/ObjectValues.java
index 5dd94a7..ec84d53 100644
--- a/src/main/java/org/zwobble/couscous/values/ObjectValues.java
+++ b/src/main/java/org/zwobble/couscous/values/ObjectValues.java
@@ -3,6 +3,7 @@ package org.zwobble.couscous.values;
import org.zwobble.couscous.ast.types.ScalarType;
public class ObjectValues {
+ public static final ScalarType VOID = ScalarType.of("void");
public static final ScalarType CLASS = ScalarType.of("java.lang.Class");
public static final ScalarType OBJECT = ScalarType.of("java.lang.Object");
public static final ScalarType BOXED_INT = ScalarType.of("java.lang.Integer");
diff --git a/src/main/java/org/zwobble/couscous/values/UnitValue.java b/src/main/java/org/zwobble/couscous/values/UnitValue.java
index 398f04a..241917b 100644
--- a/src/main/java/org/zwobble/couscous/values/UnitValue.java
+++ b/src/main/java/org/zwobble/couscous/values/UnitValue.java
@@ -3,7 +3,7 @@ package org.zwobble.couscous.values;
import org.zwobble.couscous.ast.types.ScalarType;
public class UnitValue implements PrimitiveValue {
- public static final ScalarType REF = ScalarType.of("org.zwobble.couscous.runtime.Unit");
+ public static final ScalarType REF = ScalarType.of("void");
static final UnitValue UNIT = new UnitValue();