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 --- .../couscous/interpreter/values/StaticReceiverValue.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'src/main/java/org/zwobble/couscous/interpreter/values/StaticReceiverValue.java') 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 cf2c9b7..deca938 100644 --- a/src/main/java/org/zwobble/couscous/interpreter/values/StaticReceiverValue.java +++ b/src/main/java/org/zwobble/couscous/interpreter/values/StaticReceiverValue.java @@ -4,8 +4,11 @@ import org.zwobble.couscous.ast.MethodSignature; 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; @@ -35,7 +38,12 @@ public class StaticReceiverValue implements ReceiverValue { Executor.exec(environment, type.getStaticConstructor()); } - public InterpreterValue callConstructor(Environment environment, List arguments) { - return type.callConstructor(environment, arguments); + public InterpreterValue callConstructor(Environment environment, Optional> typeParameters, List arguments) { + InterpreterType objectType = typeParameters + .map(parameters -> new ParameterizedInterpreterType(type, parameters)) + .orElse(type); + ObjectInterpreterValue value = new ObjectInterpreterValue(objectType); + type.callConstructor(environment, value, arguments); + return value; } } -- cgit v1.2.3