From 8187130b8a8aabbcf983e530413d6969141d6da2 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Thu, 1 Oct 2015 21:04:37 +0100 Subject: Allow static method calls --- .../org/zwobble/couscous/interpreter/Evaluator.java | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) (limited to 'src/main/java/org/zwobble/couscous/interpreter/Evaluator.java') diff --git a/src/main/java/org/zwobble/couscous/interpreter/Evaluator.java b/src/main/java/org/zwobble/couscous/interpreter/Evaluator.java index 6a566c9..5acef94 100644 --- a/src/main/java/org/zwobble/couscous/interpreter/Evaluator.java +++ b/src/main/java/org/zwobble/couscous/interpreter/Evaluator.java @@ -1,11 +1,13 @@ package org.zwobble.couscous.interpreter; +import java.util.List; import java.util.stream.Collectors; import org.zwobble.couscous.ast.Assignment; import org.zwobble.couscous.ast.ExpressionNode; import org.zwobble.couscous.ast.LiteralNode; import org.zwobble.couscous.ast.MethodCallNode; +import org.zwobble.couscous.ast.StaticMethodCallNode; import org.zwobble.couscous.ast.TernaryConditionalNode; import org.zwobble.couscous.ast.VariableReferenceNode; import org.zwobble.couscous.ast.visitors.ExpressionNodeVisitor; @@ -62,10 +64,21 @@ public class Evaluator implements ExpressionNodeVisitor { public InterpreterValue visit(MethodCallNode methodCall) { val receiver = eval(methodCall.getReceiver()); val type = receiver.getType(); - val arguments = methodCall.getArguments() + val arguments = evalArguments(methodCall.getArguments()); + return type.callMethod(receiver, methodCall.getMethodName(), arguments); + } + + private List evalArguments(List arguments) { + return arguments .stream() .map(argument -> eval(argument)) .collect(Collectors.toList()); - return type.callMethod(receiver, methodCall.getMethodName(), arguments); + } + + @Override + public InterpreterValue visit(StaticMethodCallNode staticMethodCall) { + val clazz = environment.findClass(staticMethodCall.getClassName()); + val arguments = evalArguments(staticMethodCall.getArguments()); + return clazz.callStaticMethod(staticMethodCall.getMethodName(), arguments); } } -- cgit v1.2.3