aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/couscous/interpreter/values/StaticReceiverValue.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/values/StaticReceiverValue.java
parentd4c5596cc4c20d884e33d0eb0faab87505483e46 (diff)
Create parameterised types with correct interpreter type
Diffstat (limited to 'src/main/java/org/zwobble/couscous/interpreter/values/StaticReceiverValue.java')
-rw-r--r--src/main/java/org/zwobble/couscous/interpreter/values/StaticReceiverValue.java12
1 files changed, 10 insertions, 2 deletions
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<InterpreterValue> arguments) {
- return type.callConstructor(environment, arguments);
+ public InterpreterValue callConstructor(Environment environment, Optional<List<Type>> typeParameters, List<InterpreterValue> arguments) {
+ InterpreterType objectType = typeParameters
+ .<InterpreterType>map(parameters -> new ParameterizedInterpreterType(type, parameters))
+ .orElse(type);
+ ObjectInterpreterValue value = new ObjectInterpreterValue(objectType);
+ type.callConstructor(environment, value, arguments);
+ return value;
}
}