aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/couscous/interpreter/values/StaticReceiverValue.java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-02-11 21:33:25 +0000
committerMichael Williamson <mike@zwobble.org>2016-02-11 21:33:25 +0000
commita34a00ba19f6ffb61762da4629b53b8a633f9d17 (patch)
tree6ae34a92c0dfe9a24df0b7e90da2da263a61f708 /src/main/java/org/zwobble/couscous/interpreter/values/StaticReceiverValue.java
parent6d02b3e3e6f8da9837a46efda4733bdd89e38aaf (diff)
Implement static constructor and fields in interpreter
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.java21
1 files changed, 21 insertions, 0 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 f7ce1f6..9844e33 100644
--- a/src/main/java/org/zwobble/couscous/interpreter/values/StaticReceiverValue.java
+++ b/src/main/java/org/zwobble/couscous/interpreter/values/StaticReceiverValue.java
@@ -2,18 +2,39 @@ package org.zwobble.couscous.interpreter.values;
import org.zwobble.couscous.ast.MethodSignature;
import org.zwobble.couscous.interpreter.Environment;
+import org.zwobble.couscous.interpreter.Executor;
import java.util.List;
public class StaticReceiverValue implements ReceiverValue {
private final ConcreteType type;
+ private final InterpreterFields fields;
public StaticReceiverValue(ConcreteType type) {
this.type = type;
+ this.fields = new InterpreterFields(type);
}
@Override
public InterpreterValue callMethod(Environment environment, MethodSignature signature, List<InterpreterValue> arguments) {
return type.callStaticMethod(environment, signature, arguments);
}
+
+ @Override
+ public InterpreterValue getField(String fieldName) {
+ return fields.getField(fieldName);
+ }
+
+ @Override
+ public void setField(String fieldName, InterpreterValue value) {
+ fields.setField(fieldName, value);
+ }
+
+ public void callStaticConstructor(Environment environment) {
+ Executor.exec(environment, type.getStaticConstructor());
+ }
+
+ public InterpreterValue callConstructor(Environment environment, List<InterpreterValue> arguments) {
+ return type.callConstructor(environment, arguments);
+ }
}