diff options
| author | Michael Williamson <mike@zwobble.org> | 2016-03-31 19:50:44 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2016-03-31 19:50:44 +0100 |
| commit | 73fd96aa67f29e2cce3ac5d0042a4446c08eb034 (patch) | |
| tree | 78dddaa11bcb9f61b2fb2b49d74b4f4e49d75b76 /src/main/java/org/zwobble/couscous/interpreter/Evaluator.java | |
| parent | d4c5596cc4c20d884e33d0eb0faab87505483e46 (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.java | 8 |
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 |
