diff options
Diffstat (limited to 'src/main/java/org')
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); + } } |
