diff options
| author | Michael Williamson <mike@zwobble.org> | 2015-10-06 13:44:18 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2015-10-06 13:44:18 +0100 |
| commit | 7324dc0bd7c70c0be4a28ca2bba5522cceaf277f (patch) | |
| tree | 14d3df885c13346cd1c9d1cbfa63ffe27a2a01e4 /src/main/java/org/zwobble/couscous/interpreter/Evaluator.java | |
| parent | ba5bf4a7c4f9097d540352afa1e895d2f1019328 (diff) | |
Add basic implementation of instance methods
Diffstat (limited to 'src/main/java/org/zwobble/couscous/interpreter/Evaluator.java')
| -rw-r--r-- | src/main/java/org/zwobble/couscous/interpreter/Evaluator.java | 24 |
1 files changed, 16 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 9f183ec..ee67da0 100644 --- a/src/main/java/org/zwobble/couscous/interpreter/Evaluator.java +++ b/src/main/java/org/zwobble/couscous/interpreter/Evaluator.java @@ -4,6 +4,7 @@ import java.util.List; import java.util.stream.Collectors; import org.zwobble.couscous.ast.AssignmentNode; +import org.zwobble.couscous.ast.ConstructorCallNode; import org.zwobble.couscous.ast.ExpressionNode; import org.zwobble.couscous.ast.LiteralNode; import org.zwobble.couscous.ast.MethodCallNode; @@ -66,14 +67,7 @@ public class Evaluator implements ExpressionNodeMapper<InterpreterValue> { val receiver = eval(methodCall.getReceiver()); val type = receiver.getType(); val arguments = evalArguments(methodCall.getArguments()); - return type.callMethod(receiver, methodCall.getMethodName(), arguments); - } - - private List<InterpreterValue> evalArguments(List<ExpressionNode> arguments) { - return arguments - .stream() - .map(argument -> eval(argument)) - .collect(Collectors.toList()); + return type.callMethod(environment, receiver, methodCall.getMethodName(), arguments); } @Override @@ -82,4 +76,18 @@ public class Evaluator implements ExpressionNodeMapper<InterpreterValue> { val arguments = evalArguments(staticMethodCall.getArguments()); return clazz.callStaticMethod(environment, staticMethodCall.getMethodName(), arguments); } + + @Override + public InterpreterValue visit(ConstructorCallNode call) { + val clazz = environment.findClass(call.getType()); + val arguments = evalArguments(call.getArguments()); + return clazz.callConstructor(environment, arguments); + } + + private List<InterpreterValue> evalArguments(List<ExpressionNode> arguments) { + return arguments + .stream() + .map(argument -> eval(argument)) + .collect(Collectors.toList()); + } } |
