aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/couscous/interpreter/values/StaticReceiverValue.java
diff options
context:
space:
mode:
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;
}
}