From e4229671c4cf6db860fc6cf68bcfb8fdd69fdcb8 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Wed, 6 Jan 2016 08:16:52 +0000 Subject: Support method overloading in interpreter --- .../java/org/zwobble/couscous/interpreter/Evaluator.java | 12 ++++++++++-- 1 file changed, 10 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 910cba7..1271d72 100644 --- a/src/main/java/org/zwobble/couscous/interpreter/Evaluator.java +++ b/src/main/java/org/zwobble/couscous/interpreter/Evaluator.java @@ -10,6 +10,8 @@ import org.zwobble.couscous.values.IntegerValue; import java.util.List; import java.util.stream.Collectors; +import static org.zwobble.couscous.util.ExtraLists.eagerMap; + public class Evaluator implements ExpressionNodeMapper { public static InterpreterValue eval(Environment environment, ExpressionNode expression) { return new Evaluator(environment).eval(expression); @@ -76,14 +78,20 @@ public class Evaluator implements ExpressionNodeMapper { InterpreterValue receiver = eval(methodCall.getReceiver()); ConcreteType type = receiver.getType(); List arguments = evalArguments(methodCall.getArguments()); - return type.callMethod(environment, receiver, methodCall.getMethodName(), arguments); + MethodSignature signature = new MethodSignature( + methodCall.getMethodName(), + eagerMap(arguments, argument -> argument.getType().getName())); + return type.callMethod(environment, receiver, signature, arguments); } @Override public InterpreterValue visit(StaticMethodCallNode staticMethodCall) { ConcreteType clazz = environment.findClass(staticMethodCall.getClassName()); List arguments = evalArguments(staticMethodCall.getArguments()); - return clazz.callStaticMethod(environment, staticMethodCall.getMethodName(), arguments); + MethodSignature signature = new MethodSignature( + staticMethodCall.getMethodName(), + eagerMap(arguments, argument -> argument.getType().getName())); + return clazz.callStaticMethod(environment, signature, arguments); } @Override -- cgit v1.2.3