aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/couscous/interpreter/Evaluator.java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2015-09-30 19:47:38 +0100
committerMichael Williamson <mike@zwobble.org>2015-09-30 19:47:38 +0100
commitc1de40d3615a8efc852fd1a12832437ee3ce4318 (patch)
treef2a19503d7b38f1cea01390a3c8567e4480364fb /src/main/java/org/zwobble/couscous/interpreter/Evaluator.java
parent7c48c6b29d562ac5d3cb82b253e75e92a4b86a93 (diff)
Define methods once per type
Diffstat (limited to 'src/main/java/org/zwobble/couscous/interpreter/Evaluator.java')
-rw-r--r--src/main/java/org/zwobble/couscous/interpreter/Evaluator.java5
1 files changed, 2 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 7aba54b..6a566c9 100644
--- a/src/main/java/org/zwobble/couscous/interpreter/Evaluator.java
+++ b/src/main/java/org/zwobble/couscous/interpreter/Evaluator.java
@@ -61,12 +61,11 @@ public class Evaluator implements ExpressionNodeVisitor<InterpreterValue> {
@Override
public InterpreterValue visit(MethodCallNode methodCall) {
val receiver = eval(methodCall.getReceiver());
+ val type = receiver.getType();
val arguments = methodCall.getArguments()
.stream()
.map(argument -> eval(argument))
.collect(Collectors.toList());
- val method = receiver.getMethod(methodCall.getMethodName())
- .orElseThrow(() -> new NoSuchMethod(methodCall.getMethodName()));
- return method.call(arguments);
+ return type.callMethod(receiver, methodCall.getMethodName(), arguments);
}
}