diff options
Diffstat (limited to 'src')
5 files changed, 22 insertions, 24 deletions
diff --git a/src/main/java/org/zwobble/couscous/interpreter/Arguments.java b/src/main/java/org/zwobble/couscous/interpreter/Arguments.java index f562de6..07797d9 100644 --- a/src/main/java/org/zwobble/couscous/interpreter/Arguments.java +++ b/src/main/java/org/zwobble/couscous/interpreter/Arguments.java @@ -1,13 +1,16 @@ package org.zwobble.couscous.interpreter; import org.zwobble.couscous.interpreter.values.InterpreterValue; +import org.zwobble.couscous.types.Type; import java.util.List; public class Arguments { - private List<InterpreterValue> values; + private final List<Type> types; + private final List<InterpreterValue> values; - public Arguments(List<InterpreterValue> values) { + public Arguments(List<Type> types, List<InterpreterValue> values) { + this.types = types; this.values = values; } @@ -15,6 +18,10 @@ public class Arguments { return values.get(index); } + public List<Type> getTypes() { + return types; + } + public List<InterpreterValue> getValues() { return values; } diff --git a/src/main/java/org/zwobble/couscous/interpreter/Evaluator.java b/src/main/java/org/zwobble/couscous/interpreter/Evaluator.java index 5488506..bbc41d1 100644 --- a/src/main/java/org/zwobble/couscous/interpreter/Evaluator.java +++ b/src/main/java/org/zwobble/couscous/interpreter/Evaluator.java @@ -12,12 +12,12 @@ import org.zwobble.couscous.types.Type; import org.zwobble.couscous.types.Types; import java.util.List; -import java.util.Optional; import java.util.stream.Collectors; import static org.zwobble.couscous.types.Types.erasure; import static org.zwobble.couscous.util.Casts.tryCast; import static org.zwobble.couscous.util.ExtraLists.eagerMap; +import static org.zwobble.couscous.util.ExtraLists.list; public class Evaluator implements ExpressionNodeMapper<InterpreterValue> { public static InterpreterValue eval(Environment environment, ExpressionNode expression) { @@ -102,16 +102,17 @@ public class Evaluator implements ExpressionNodeMapper<InterpreterValue> { MethodSignature signature = methodCall.signature(); return evalReceiver(methodCall.getReceiver()) - .callMethod(environment, signature, new Arguments(arguments)); + .callMethod(environment, signature, new Arguments(list(), arguments)); } @Override public InterpreterValue visit(ConstructorCallNode call) { StaticReceiverValue clazz = environment.findClass(erasure(call.getType())); List<InterpreterValue> arguments = evalArguments(call.getArguments()); - Optional<List<Type>> typeParameters = tryCast(ParameterizedType.class, call.getType()) - .map(type -> type.getParameters()); - return clazz.callConstructor(environment, typeParameters, new Arguments(arguments)); + List<Type> typeParameters = tryCast(ParameterizedType.class, call.getType()) + .map(type -> type.getParameters()) + .orElse(list()); + return clazz.callConstructor(environment, new Arguments(typeParameters, arguments)); } @Override diff --git a/src/main/java/org/zwobble/couscous/interpreter/Interpreter.java b/src/main/java/org/zwobble/couscous/interpreter/Interpreter.java index b447367..a87b203 100644 --- a/src/main/java/org/zwobble/couscous/interpreter/Interpreter.java +++ b/src/main/java/org/zwobble/couscous/interpreter/Interpreter.java @@ -11,6 +11,7 @@ import java.util.List; import java.util.Optional; import static org.zwobble.couscous.util.ExtraLists.eagerMap; +import static org.zwobble.couscous.util.ExtraLists.list; public class Interpreter { private Project project; @@ -30,6 +31,6 @@ public class Interpreter { methodName, eagerMap(arguments, argument -> argument.getType().getType()), returnType); - return clazz.callMethod(environment, signature, new Arguments(arguments)); + return clazz.callMethod(environment, signature, new Arguments(list(), arguments)); } }
\ No newline at end of file diff --git a/src/main/java/org/zwobble/couscous/interpreter/values/StaticReceiverValue.java b/src/main/java/org/zwobble/couscous/interpreter/values/StaticReceiverValue.java index 51a1736..945287b 100644 --- a/src/main/java/org/zwobble/couscous/interpreter/values/StaticReceiverValue.java +++ b/src/main/java/org/zwobble/couscous/interpreter/values/StaticReceiverValue.java @@ -6,10 +6,6 @@ import org.zwobble.couscous.interpreter.Environment; import org.zwobble.couscous.interpreter.Executor; import org.zwobble.couscous.interpreter.types.InterpreterType; import org.zwobble.couscous.interpreter.types.ParameterizedInterpreterType; -import org.zwobble.couscous.types.Type; - -import java.util.List; -import java.util.Optional; public class StaticReceiverValue implements ReceiverValue { private final InterpreterType type; @@ -39,10 +35,10 @@ public class StaticReceiverValue implements ReceiverValue { Executor.exec(environment, type.getStaticConstructor()); } - public InterpreterValue callConstructor(Environment environment, Optional<List<Type>> typeParameters, Arguments arguments) { - InterpreterType objectType = typeParameters - .<InterpreterType>map(parameters -> new ParameterizedInterpreterType(type, parameters)) - .orElse(type); + public InterpreterValue callConstructor(Environment environment, Arguments arguments) { + InterpreterType objectType = arguments.getTypes().isEmpty() + ? type + : new ParameterizedInterpreterType(type, arguments.getTypes()); ObjectInterpreterValue value = new ObjectInterpreterValue(objectType); type.callConstructor(environment, value, arguments); return value; diff --git a/src/test/java/org/zwobble/couscous/tests/JavaToInterpreterTests.java b/src/test/java/org/zwobble/couscous/tests/JavaToInterpreterTests.java index 763a4e7..11883ca 100644 --- a/src/test/java/org/zwobble/couscous/tests/JavaToInterpreterTests.java +++ b/src/test/java/org/zwobble/couscous/tests/JavaToInterpreterTests.java @@ -1,9 +1,6 @@ package org.zwobble.couscous.tests; import com.google.common.collect.ImmutableList; -import org.junit.Ignore; -import org.junit.Test; -import org.zwobble.couscous.types.ScalarType; import org.zwobble.couscous.ast.TypeNode; import org.zwobble.couscous.frontends.java.JavaFrontend; import org.zwobble.couscous.interpreter.Interpreter; @@ -11,6 +8,7 @@ import org.zwobble.couscous.interpreter.JavaProject; import org.zwobble.couscous.interpreter.Project; import org.zwobble.couscous.interpreter.values.InterpreterValue; import org.zwobble.couscous.interpreter.values.InterpreterValues; +import org.zwobble.couscous.types.ScalarType; import org.zwobble.couscous.values.PrimitiveValue; import java.io.IOException; @@ -21,11 +19,6 @@ import static com.google.common.collect.Iterables.transform; import static org.zwobble.couscous.util.ExtraLists.list; public class JavaToInterpreterTests extends CompilerTests { - @Test - @Ignore("WIP") - public void genericInterfacesCanHaveMethodsWithoutGenericReturnType() throws Exception { - } - @Override protected PrimitiveValue execProgram( Path directory, |
