aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main/java/org/zwobble/couscous/interpreter/Arguments.java11
-rw-r--r--src/main/java/org/zwobble/couscous/interpreter/Evaluator.java11
-rw-r--r--src/main/java/org/zwobble/couscous/interpreter/Interpreter.java3
-rw-r--r--src/main/java/org/zwobble/couscous/interpreter/values/StaticReceiverValue.java12
-rw-r--r--src/test/java/org/zwobble/couscous/tests/JavaToInterpreterTests.java9
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,