diff options
5 files changed, 16 insertions, 21 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(); diff --git a/src/test/java/org/zwobble/couscous/tests/backends/csharp/JavaToCsharpTests.java b/src/test/java/org/zwobble/couscous/tests/backends/csharp/JavaToCsharpTests.java index 799ea91..ad0da0b 100644 --- a/src/test/java/org/zwobble/couscous/tests/backends/csharp/JavaToCsharpTests.java +++ b/src/test/java/org/zwobble/couscous/tests/backends/csharp/JavaToCsharpTests.java @@ -1,7 +1,5 @@ package org.zwobble.couscous.tests.backends.csharp; -import org.junit.Ignore; -import org.junit.Test; import org.zwobble.couscous.CouscousCompiler; import org.zwobble.couscous.ast.types.ScalarType; import org.zwobble.couscous.backends.csharp.CsharpBackend; @@ -18,11 +16,6 @@ import static org.zwobble.couscous.tests.util.ExtraFiles.deleteRecursively; import static org.zwobble.couscous.util.ExtraLists.list; public class JavaToCsharpTests extends CompilerTests { - @Test - @Ignore("WIP") - public void genericInterfacesCanHaveMethodsWithoutGenericReturnType() throws Exception { - } - protected PrimitiveValue execProgram( Path directory, ScalarType type, |
