aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/couscous/interpreter/Interpreter.java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2015-10-31 16:07:19 +0000
committerMichael Williamson <mike@zwobble.org>2015-10-31 16:07:19 +0000
commitad4903f04c757779b2e9a875298ef8418cb140b4 (patch)
tree49c28509587633d484e6fbcdd8537e15e854a567 /src/main/java/org/zwobble/couscous/interpreter/Interpreter.java
parent4e13a3a626f630eb1031f32b1c3405cbf40952bc (diff)
Support equality on reference types
Diffstat (limited to 'src/main/java/org/zwobble/couscous/interpreter/Interpreter.java')
-rw-r--r--src/main/java/org/zwobble/couscous/interpreter/Interpreter.java24
1 files changed, 10 insertions, 14 deletions
diff --git a/src/main/java/org/zwobble/couscous/interpreter/Interpreter.java b/src/main/java/org/zwobble/couscous/interpreter/Interpreter.java
index e5f6482..95510cd 100644
--- a/src/main/java/org/zwobble/couscous/interpreter/Interpreter.java
+++ b/src/main/java/org/zwobble/couscous/interpreter/Interpreter.java
@@ -2,14 +2,12 @@ package org.zwobble.couscous.interpreter;
import java.util.List;
import java.util.Optional;
-import java.util.stream.Collectors;
+
import org.zwobble.couscous.ast.TypeName;
-import org.zwobble.couscous.ast.ExpressionNode;
+import org.zwobble.couscous.interpreter.values.ConcreteType;
import org.zwobble.couscous.interpreter.values.InterpreterValue;
+
import com.google.common.collect.ImmutableMap;
-import static org.zwobble.couscous.ast.LiteralNode.literal;
-import static org.zwobble.couscous.ast.StaticMethodCallNode.staticMethodCall;
-import static org.zwobble.couscous.interpreter.Evaluator.eval;
public class Interpreter {
private Project project;
@@ -19,14 +17,12 @@ public class Interpreter {
}
public InterpreterValue run(TypeName className, String methodName, List<InterpreterValue> arguments) {
- List<ExpressionNode> argumentExpressions = arguments.stream()
- .map(argument -> literal(argument.toPrimitiveValue().get()))
- .collect(Collectors.toList());
- return eval(
- new Environment(
- project,
- Optional.empty(),
- ImmutableMap.of()),
- staticMethodCall(className, methodName, argumentExpressions));
+ final Environment environment = new Environment(
+ project,
+ Optional.empty(),
+ ImmutableMap.of());
+
+ ConcreteType clazz = environment.findClass(className);
+ return clazz.callStaticMethod(environment, methodName, arguments);
}
} \ No newline at end of file