diff options
| author | Michael Williamson <mike@zwobble.org> | 2016-02-11 21:04:34 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2016-02-11 21:04:34 +0000 |
| commit | 6d02b3e3e6f8da9837a46efda4733bdd89e38aaf (patch) | |
| tree | 8facff18b51ddd9d08a75589366ea808be2fec6b /src/main/java/org/zwobble/couscous/interpreter/Evaluator.java | |
| parent | a69265ba097c4e8623b15f4000e094a78871de68 (diff) | |
Introduce ReceiverValue into interpreter
Diffstat (limited to 'src/main/java/org/zwobble/couscous/interpreter/Evaluator.java')
| -rw-r--r-- | src/main/java/org/zwobble/couscous/interpreter/Evaluator.java | 18 |
1 files changed, 10 insertions, 8 deletions
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<InterpreterValue> { List<InterpreterValue> arguments = evalArguments(methodCall.getArguments()); MethodSignature signature = methodCall.signature(); - return methodCall.getReceiver().accept(new Receiver.Mapper<InterpreterValue>() { + return evalReceiver(methodCall.getReceiver()) + .callMethod(environment, signature, arguments); + } + + private ReceiverValue evalReceiver(Receiver receiver) { + return receiver.accept(new Receiver.Mapper<ReceiverValue>() { @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)); } }); } |
