From 6d02b3e3e6f8da9837a46efda4733bdd89e38aaf Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Thu, 11 Feb 2016 21:04:34 +0000 Subject: Introduce ReceiverValue into interpreter --- .../interpreter/values/InstanceReceiverValue.java | 20 ++++++++++++++++++++ .../couscous/interpreter/values/ReceiverValue.java | 10 ++++++++++ .../interpreter/values/StaticReceiverValue.java | 19 +++++++++++++++++++ 3 files changed, 49 insertions(+) create mode 100644 src/main/java/org/zwobble/couscous/interpreter/values/InstanceReceiverValue.java create mode 100644 src/main/java/org/zwobble/couscous/interpreter/values/ReceiverValue.java create mode 100644 src/main/java/org/zwobble/couscous/interpreter/values/StaticReceiverValue.java (limited to 'src/main/java/org/zwobble/couscous/interpreter/values') diff --git a/src/main/java/org/zwobble/couscous/interpreter/values/InstanceReceiverValue.java b/src/main/java/org/zwobble/couscous/interpreter/values/InstanceReceiverValue.java new file mode 100644 index 0000000..3c3d932 --- /dev/null +++ b/src/main/java/org/zwobble/couscous/interpreter/values/InstanceReceiverValue.java @@ -0,0 +1,20 @@ +package org.zwobble.couscous.interpreter.values; + +import org.zwobble.couscous.ast.MethodSignature; +import org.zwobble.couscous.interpreter.Environment; + +import java.util.List; + +public class InstanceReceiverValue implements ReceiverValue { + private final InterpreterValue value; + + public InstanceReceiverValue(InterpreterValue value) { + this.value = value; + } + + @Override + public InterpreterValue callMethod(Environment environment, MethodSignature signature, List arguments) { + ConcreteType type = value.getType(); + return type.callMethod(environment, value, signature, arguments); + } +} diff --git a/src/main/java/org/zwobble/couscous/interpreter/values/ReceiverValue.java b/src/main/java/org/zwobble/couscous/interpreter/values/ReceiverValue.java new file mode 100644 index 0000000..5b24f95 --- /dev/null +++ b/src/main/java/org/zwobble/couscous/interpreter/values/ReceiverValue.java @@ -0,0 +1,10 @@ +package org.zwobble.couscous.interpreter.values; + +import org.zwobble.couscous.ast.MethodSignature; +import org.zwobble.couscous.interpreter.Environment; + +import java.util.List; + +public interface ReceiverValue { + InterpreterValue callMethod(Environment environment, MethodSignature signature, List arguments); +} diff --git a/src/main/java/org/zwobble/couscous/interpreter/values/StaticReceiverValue.java b/src/main/java/org/zwobble/couscous/interpreter/values/StaticReceiverValue.java new file mode 100644 index 0000000..f7ce1f6 --- /dev/null +++ b/src/main/java/org/zwobble/couscous/interpreter/values/StaticReceiverValue.java @@ -0,0 +1,19 @@ +package org.zwobble.couscous.interpreter.values; + +import org.zwobble.couscous.ast.MethodSignature; +import org.zwobble.couscous.interpreter.Environment; + +import java.util.List; + +public class StaticReceiverValue implements ReceiverValue { + private final ConcreteType type; + + public StaticReceiverValue(ConcreteType type) { + this.type = type; + } + + @Override + public InterpreterValue callMethod(Environment environment, MethodSignature signature, List arguments) { + return type.callStaticMethod(environment, signature, arguments); + } +} -- cgit v1.2.3