aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2015-10-06 17:50:34 +0100
committerMichael Williamson <mike@zwobble.org>2015-10-06 17:50:34 +0100
commitbb9bd25ef93d06deda2c293f01b3a3cdb769c10c (patch)
tree07724fbd6372bc5f37a6589178173ed64653b272
parentab650e9888794cb7783fb8ffd80c41d91daca017 (diff)
Add setField to InterpreterValue interface
-rw-r--r--src/main/java/org/zwobble/couscous/interpreter/Evaluator.java7
-rw-r--r--src/main/java/org/zwobble/couscous/interpreter/values/BooleanInterpreterValue.java5
-rw-r--r--src/main/java/org/zwobble/couscous/interpreter/values/IntegerInterpreterValue.java5
-rw-r--r--src/main/java/org/zwobble/couscous/interpreter/values/InterpreterValue.java1
-rw-r--r--src/main/java/org/zwobble/couscous/interpreter/values/ObjectInterpreterValue.java1
-rw-r--r--src/main/java/org/zwobble/couscous/interpreter/values/StringInterpreterValue.java5
-rw-r--r--src/main/java/org/zwobble/couscous/interpreter/values/UnitInterpreterValue.java5
7 files changed, 23 insertions, 6 deletions
diff --git a/src/main/java/org/zwobble/couscous/interpreter/Evaluator.java b/src/main/java/org/zwobble/couscous/interpreter/Evaluator.java
index ca12ccd..1bc1ab8 100644
--- a/src/main/java/org/zwobble/couscous/interpreter/Evaluator.java
+++ b/src/main/java/org/zwobble/couscous/interpreter/Evaluator.java
@@ -18,8 +18,6 @@ import org.zwobble.couscous.ast.visitors.ExpressionNodeMapper;
import org.zwobble.couscous.interpreter.values.BooleanInterpreterValue;
import org.zwobble.couscous.interpreter.values.InterpreterValue;
import org.zwobble.couscous.interpreter.values.InterpreterValues;
-import org.zwobble.couscous.interpreter.values.ObjectInterpreterValue;
-import org.zwobble.couscous.util.Casts;
import lombok.val;
@@ -59,10 +57,7 @@ public class Evaluator implements ExpressionNodeMapper<InterpreterValue> {
assignment.getTarget().accept(new AssignableExpressionNodeVisitor() {
@Override
public void visit(FieldAccessNode fieldAccess) {
- val maybeLeft = Casts.tryCast(
- ObjectInterpreterValue.class,
- eval(fieldAccess.getLeft()));
- val left = maybeLeft.orElseThrow(() -> new UnsupportedOperationException());
+ val left = eval(fieldAccess.getLeft());
left.setField(fieldAccess.getFieldName(), value);
}
diff --git a/src/main/java/org/zwobble/couscous/interpreter/values/BooleanInterpreterValue.java b/src/main/java/org/zwobble/couscous/interpreter/values/BooleanInterpreterValue.java
index 06e8bee..7bb108c 100644
--- a/src/main/java/org/zwobble/couscous/interpreter/values/BooleanInterpreterValue.java
+++ b/src/main/java/org/zwobble/couscous/interpreter/values/BooleanInterpreterValue.java
@@ -36,4 +36,9 @@ public class BooleanInterpreterValue implements InterpreterValue {
public InterpreterValue getField(String fieldName) {
throw new NoSuchField(fieldName);
}
+
+ @Override
+ public void setField(String fieldName, InterpreterValue value) {
+ throw new NoSuchField(fieldName);
+ }
}
diff --git a/src/main/java/org/zwobble/couscous/interpreter/values/IntegerInterpreterValue.java b/src/main/java/org/zwobble/couscous/interpreter/values/IntegerInterpreterValue.java
index 1effe6a..95b05aa 100644
--- a/src/main/java/org/zwobble/couscous/interpreter/values/IntegerInterpreterValue.java
+++ b/src/main/java/org/zwobble/couscous/interpreter/values/IntegerInterpreterValue.java
@@ -40,4 +40,9 @@ public class IntegerInterpreterValue implements InterpreterValue {
public InterpreterValue getField(String fieldName) {
throw new NoSuchField(fieldName);
}
+
+ @Override
+ public void setField(String fieldName, InterpreterValue value) {
+ throw new NoSuchField(fieldName);
+ }
}
diff --git a/src/main/java/org/zwobble/couscous/interpreter/values/InterpreterValue.java b/src/main/java/org/zwobble/couscous/interpreter/values/InterpreterValue.java
index 78d27d2..e02387b 100644
--- a/src/main/java/org/zwobble/couscous/interpreter/values/InterpreterValue.java
+++ b/src/main/java/org/zwobble/couscous/interpreter/values/InterpreterValue.java
@@ -8,4 +8,5 @@ public interface InterpreterValue {
ConcreteType getType();
Optional<PrimitiveValue> toPrimitiveValue();
InterpreterValue getField(String fieldName);
+ void setField(String fieldName, InterpreterValue value);
}
diff --git a/src/main/java/org/zwobble/couscous/interpreter/values/ObjectInterpreterValue.java b/src/main/java/org/zwobble/couscous/interpreter/values/ObjectInterpreterValue.java
index 03e8061..b248398 100644
--- a/src/main/java/org/zwobble/couscous/interpreter/values/ObjectInterpreterValue.java
+++ b/src/main/java/org/zwobble/couscous/interpreter/values/ObjectInterpreterValue.java
@@ -40,6 +40,7 @@ public class ObjectInterpreterValue implements InterpreterValue {
}
}
+ @Override
public void setField(String fieldName, InterpreterValue value) {
val field = type.getField(fieldName).orElseThrow(() -> new NoSuchField(fieldName));
InterpreterTypes.checkIsInstance(field.getType(), value);
diff --git a/src/main/java/org/zwobble/couscous/interpreter/values/StringInterpreterValue.java b/src/main/java/org/zwobble/couscous/interpreter/values/StringInterpreterValue.java
index a4dde19..15bde43 100644
--- a/src/main/java/org/zwobble/couscous/interpreter/values/StringInterpreterValue.java
+++ b/src/main/java/org/zwobble/couscous/interpreter/values/StringInterpreterValue.java
@@ -45,4 +45,9 @@ public class StringInterpreterValue implements InterpreterValue {
public InterpreterValue getField(String fieldName) {
throw new NoSuchField(fieldName);
}
+
+ @Override
+ public void setField(String fieldName, InterpreterValue value) {
+ throw new NoSuchField(fieldName);
+ }
}
diff --git a/src/main/java/org/zwobble/couscous/interpreter/values/UnitInterpreterValue.java b/src/main/java/org/zwobble/couscous/interpreter/values/UnitInterpreterValue.java
index e221fee..1c184a4 100644
--- a/src/main/java/org/zwobble/couscous/interpreter/values/UnitInterpreterValue.java
+++ b/src/main/java/org/zwobble/couscous/interpreter/values/UnitInterpreterValue.java
@@ -32,4 +32,9 @@ public class UnitInterpreterValue implements InterpreterValue {
public InterpreterValue getField(String fieldName) {
throw new NoSuchField(fieldName);
}
+
+ @Override
+ public void setField(String fieldName, InterpreterValue value) {
+ throw new NoSuchField(fieldName);
+ }
}