diff options
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.java | 12 |
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; } } |
