aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/couscous/interpreter/Evaluator.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/org/zwobble/couscous/interpreter/Evaluator.java')
-rw-r--r--src/main/java/org/zwobble/couscous/interpreter/Evaluator.java6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/main/java/org/zwobble/couscous/interpreter/Evaluator.java b/src/main/java/org/zwobble/couscous/interpreter/Evaluator.java
index d90b78b..56ccca7 100644
--- a/src/main/java/org/zwobble/couscous/interpreter/Evaluator.java
+++ b/src/main/java/org/zwobble/couscous/interpreter/Evaluator.java
@@ -125,7 +125,11 @@ public class Evaluator implements ExpressionNodeMapper<InterpreterValue> {
@Override
public InterpreterValue visit(CastNode cast) {
- throw new UnsupportedOperationException();
+ InterpreterValue value = eval(cast.getExpression());
+ if (!InterpreterTypes.isSubType(cast.getType(), value.getType())) {
+ throw new InvalidCast(cast.getType(), value.getType().getName());
+ }
+ return value;
}
private static boolean isIntegerBox(TypeCoercionNode typeCoercion) {