From 73fd96aa67f29e2cce3ac5d0042a4446c08eb034 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Thu, 31 Mar 2016 19:50:44 +0100 Subject: Create parameterised types with correct interpreter type --- src/main/java/org/zwobble/couscous/interpreter/Evaluator.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'src/main/java/org/zwobble/couscous/interpreter/Evaluator.java') 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 { @@ -105,7 +109,9 @@ public class Evaluator implements ExpressionNodeMapper { public InterpreterValue visit(ConstructorCallNode call) { StaticReceiverValue clazz = environment.findClass(erasure(call.getType())); List arguments = evalArguments(call.getArguments()); - return clazz.callConstructor(environment, arguments); + Optional> typeParameters = tryCast(ParameterizedType.class, call.getType()) + .map(type -> type.getParameters()); + return clazz.callConstructor(environment, typeParameters, arguments); } @Override -- cgit v1.2.3