aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/couscous/interpreter/Evaluator.java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-03-31 19:50:44 +0100
committerMichael Williamson <mike@zwobble.org>2016-03-31 19:50:44 +0100
commit73fd96aa67f29e2cce3ac5d0042a4446c08eb034 (patch)
tree78dddaa11bcb9f61b2fb2b49d74b4f4e49d75b76 /src/main/java/org/zwobble/couscous/interpreter/Evaluator.java
parentd4c5596cc4c20d884e33d0eb0faab87505483e46 (diff)
Create parameterised types with correct interpreter type
Diffstat (limited to 'src/main/java/org/zwobble/couscous/interpreter/Evaluator.java')
-rw-r--r--src/main/java/org/zwobble/couscous/interpreter/Evaluator.java8
1 files changed, 7 insertions, 1 deletions
diff --git a/src/main/java/org/zwobble/couscous/interpreter/Evaluator.java b/src/main/java/org/zwobble/couscous/interpreter/Evaluator.java
index 8c3d355..64f28ad 100644
--- a/src/main/java/org/zwobble/couscous/interpreter/Evaluator.java
+++ b/src/main/java/org/zwobble/couscous/interpreter/Evaluator.java
@@ -6,13 +6,17 @@ import org.zwobble.couscous.ast.visitors.ExpressionNodeMapper;
import org.zwobble.couscous.interpreter.errors.ConditionMustBeBoolean;
import org.zwobble.couscous.interpreter.errors.InvalidCast;
import org.zwobble.couscous.interpreter.values.*;
+import org.zwobble.couscous.types.ParameterizedType;
import org.zwobble.couscous.types.ScalarType;
+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;
public class Evaluator implements ExpressionNodeMapper<InterpreterValue> {
@@ -105,7 +109,9 @@ public class Evaluator implements ExpressionNodeMapper<InterpreterValue> {
public InterpreterValue visit(ConstructorCallNode call) {
StaticReceiverValue clazz = environment.findClass(erasure(call.getType()));
List<InterpreterValue> arguments = evalArguments(call.getArguments());
- return clazz.callConstructor(environment, arguments);
+ Optional<List<Type>> typeParameters = tryCast(ParameterizedType.class, call.getType())
+ .map(type -> type.getParameters());
+ return clazz.callConstructor(environment, typeParameters, arguments);
}
@Override