aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/couscous/interpreter/Evaluator.java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-03-31 12:08:02 +0100
committerMichael Williamson <mike@zwobble.org>2016-03-31 12:08:02 +0100
commit6bb8fe3f983cd0a2be76239df2124af633f0e05c (patch)
tree8ae88b29f16ccbc0a408fa33f625b607c9fc32cc /src/main/java/org/zwobble/couscous/interpreter/Evaluator.java
parent2247cff5b5361a8124d4c261a1edb1852bd5f08f (diff)
Add evaluation of arrays to interpreter
Diffstat (limited to 'src/main/java/org/zwobble/couscous/interpreter/Evaluator.java')
-rw-r--r--src/main/java/org/zwobble/couscous/interpreter/Evaluator.java9
1 files changed, 6 insertions, 3 deletions
diff --git a/src/main/java/org/zwobble/couscous/interpreter/Evaluator.java b/src/main/java/org/zwobble/couscous/interpreter/Evaluator.java
index 1082ed1..8c3d355 100644
--- a/src/main/java/org/zwobble/couscous/interpreter/Evaluator.java
+++ b/src/main/java/org/zwobble/couscous/interpreter/Evaluator.java
@@ -1,18 +1,19 @@
package org.zwobble.couscous.interpreter;
import org.zwobble.couscous.ast.*;
-import org.zwobble.couscous.types.ScalarType;
import org.zwobble.couscous.ast.visitors.AssignableExpressionNodeVisitor;
import org.zwobble.couscous.ast.visitors.ExpressionNodeMapper;
import org.zwobble.couscous.interpreter.errors.ConditionMustBeBoolean;
import org.zwobble.couscous.interpreter.errors.InvalidCast;
import org.zwobble.couscous.interpreter.values.*;
+import org.zwobble.couscous.types.ScalarType;
import org.zwobble.couscous.types.Types;
import java.util.List;
import java.util.stream.Collectors;
import static org.zwobble.couscous.types.Types.erasure;
+import static org.zwobble.couscous.util.ExtraLists.eagerMap;
public class Evaluator implements ExpressionNodeMapper<InterpreterValue> {
public static InterpreterValue eval(Environment environment, ExpressionNode expression) {
@@ -52,8 +53,10 @@ public class Evaluator implements ExpressionNodeMapper<InterpreterValue> {
}
@Override
- public InterpreterValue visit(ArrayNode arrayNode) {
- throw new UnsupportedOperationException();
+ public InterpreterValue visit(ArrayNode array) {
+ return new ArrayInterpreterValue(
+ array.getElementType(),
+ eagerMap(array.getElements(), this::eval));
}
@Override