From 6d02b3e3e6f8da9837a46efda4733bdd89e38aaf Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Thu, 11 Feb 2016 21:04:34 +0000 Subject: Introduce ReceiverValue into interpreter --- .../org/zwobble/couscous/interpreter/Evaluator.java | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 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 68469fd..6c40960 100644 --- a/src/main/java/org/zwobble/couscous/interpreter/Evaluator.java +++ b/src/main/java/org/zwobble/couscous/interpreter/Evaluator.java @@ -88,18 +88,20 @@ public class Evaluator implements ExpressionNodeMapper { List arguments = evalArguments(methodCall.getArguments()); MethodSignature signature = methodCall.signature(); - return methodCall.getReceiver().accept(new Receiver.Mapper() { + return evalReceiver(methodCall.getReceiver()) + .callMethod(environment, signature, arguments); + } + + private ReceiverValue evalReceiver(Receiver receiver) { + return receiver.accept(new Receiver.Mapper() { @Override - public InterpreterValue visit(ExpressionNode receiverExpression) { - InterpreterValue receiver = eval(receiverExpression); - ConcreteType type = receiver.getType(); - return type.callMethod(environment, receiver, signature, arguments); + public ReceiverValue visit(ExpressionNode receiver) { + return new InstanceReceiverValue(eval(receiver)); } @Override - public InterpreterValue visit(TypeName receiver) { - ConcreteType clazz = environment.findClass(receiver); - return clazz.callStaticMethod(environment, signature, arguments); + public ReceiverValue visit(TypeName receiver) { + return new StaticReceiverValue(environment.findClass(receiver)); } }); } -- cgit v1.2.3