From 3be68289f34a37ac7f9e1e95fa0d95dfc1bb3836 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Fri, 15 Jul 2016 12:06:42 +0100 Subject: Remove ExpressionNodeMapper --- .../java/org/zwobble/couscous/ast/ArrayNode.java | 6 ---- .../org/zwobble/couscous/ast/AssignmentNode.java | 8 +----- .../java/org/zwobble/couscous/ast/CastNode.java | 8 +----- .../zwobble/couscous/ast/ConstructorCallNode.java | 8 +----- .../org/zwobble/couscous/ast/ExpressionNode.java | 4 --- .../org/zwobble/couscous/ast/FieldAccessNode.java | 6 ---- .../org/zwobble/couscous/ast/InstanceOfNode.java | 6 ---- .../java/org/zwobble/couscous/ast/LiteralNode.java | 6 ---- .../org/zwobble/couscous/ast/MethodCallNode.java | 6 ---- .../org/zwobble/couscous/ast/OperationNode.java | 8 +----- .../couscous/ast/TernaryConditionalNode.java | 8 +----- .../zwobble/couscous/ast/ThisReferenceNode.java | 8 +----- .../org/zwobble/couscous/ast/TypeCoercionNode.java | 8 +----- .../couscous/ast/VariableReferenceNode.java | 8 +----- .../ast/visitors/ExpressionNodeMapper.java | 19 ------------- .../backends/python/PythonCodeGenerator.java | 32 ++++------------------ .../zwobble/couscous/interpreter/Evaluator.java | 27 ++++-------------- 17 files changed, 20 insertions(+), 156 deletions(-) delete mode 100644 src/main/java/org/zwobble/couscous/ast/visitors/ExpressionNodeMapper.java (limited to 'src/main') diff --git a/src/main/java/org/zwobble/couscous/ast/ArrayNode.java b/src/main/java/org/zwobble/couscous/ast/ArrayNode.java index 1f3c8e3..784cb69 100644 --- a/src/main/java/org/zwobble/couscous/ast/ArrayNode.java +++ b/src/main/java/org/zwobble/couscous/ast/ArrayNode.java @@ -1,6 +1,5 @@ package org.zwobble.couscous.ast; -import org.zwobble.couscous.ast.visitors.ExpressionNodeMapper; import org.zwobble.couscous.ast.visitors.NodeTransformer; import org.zwobble.couscous.types.Type; import org.zwobble.couscous.types.Types; @@ -33,11 +32,6 @@ public class ArrayNode implements ExpressionNode { return Types.array(elementType); } - @Override - public T accept(ExpressionNodeMapper visitor) { - return visitor.visit(this); - } - @Override public int type() { return NodeTypes.ARRAY; diff --git a/src/main/java/org/zwobble/couscous/ast/AssignmentNode.java b/src/main/java/org/zwobble/couscous/ast/AssignmentNode.java index d41f629..e12c5dd 100644 --- a/src/main/java/org/zwobble/couscous/ast/AssignmentNode.java +++ b/src/main/java/org/zwobble/couscous/ast/AssignmentNode.java @@ -1,8 +1,7 @@ package org.zwobble.couscous.ast; -import org.zwobble.couscous.types.Type; -import org.zwobble.couscous.ast.visitors.ExpressionNodeMapper; import org.zwobble.couscous.ast.visitors.NodeTransformer; +import org.zwobble.couscous.types.Type; import org.zwobble.couscous.util.ExtraIterables; import static org.zwobble.couscous.ast.ExpressionStatementNode.expressionStatement; @@ -41,11 +40,6 @@ public class AssignmentNode implements ExpressionNode { return value; } - @Override - public T accept(ExpressionNodeMapper visitor) { - return visitor.visit(this); - } - @Override public int type() { return NodeTypes.ASSIGNMENT; diff --git a/src/main/java/org/zwobble/couscous/ast/CastNode.java b/src/main/java/org/zwobble/couscous/ast/CastNode.java index d22bb63..02b2626 100644 --- a/src/main/java/org/zwobble/couscous/ast/CastNode.java +++ b/src/main/java/org/zwobble/couscous/ast/CastNode.java @@ -1,8 +1,7 @@ package org.zwobble.couscous.ast; -import org.zwobble.couscous.types.Type; -import org.zwobble.couscous.ast.visitors.ExpressionNodeMapper; import org.zwobble.couscous.ast.visitors.NodeTransformer; +import org.zwobble.couscous.types.Type; import org.zwobble.couscous.util.ExtraIterables; public class CastNode implements ExpressionNode { @@ -27,11 +26,6 @@ public class CastNode implements ExpressionNode { return type; } - @Override - public T accept(ExpressionNodeMapper visitor) { - return visitor.visit(this); - } - @Override public int type() { return NodeTypes.CAST; diff --git a/src/main/java/org/zwobble/couscous/ast/ConstructorCallNode.java b/src/main/java/org/zwobble/couscous/ast/ConstructorCallNode.java index e9eabd6..2f9c44e 100644 --- a/src/main/java/org/zwobble/couscous/ast/ConstructorCallNode.java +++ b/src/main/java/org/zwobble/couscous/ast/ConstructorCallNode.java @@ -1,8 +1,7 @@ package org.zwobble.couscous.ast; -import org.zwobble.couscous.types.Type; -import org.zwobble.couscous.ast.visitors.ExpressionNodeMapper; import org.zwobble.couscous.ast.visitors.NodeTransformer; +import org.zwobble.couscous.types.Type; import java.util.List; @@ -34,11 +33,6 @@ public class ConstructorCallNode implements ExpressionNode { return arguments; } - @Override - public T accept(ExpressionNodeMapper visitor) { - return visitor.visit(this); - } - @Override public int type() { return NodeTypes.CONSTRUCTOR_CALL; diff --git a/src/main/java/org/zwobble/couscous/ast/ExpressionNode.java b/src/main/java/org/zwobble/couscous/ast/ExpressionNode.java index 16a47e8..4a588d1 100644 --- a/src/main/java/org/zwobble/couscous/ast/ExpressionNode.java +++ b/src/main/java/org/zwobble/couscous/ast/ExpressionNode.java @@ -1,13 +1,9 @@ package org.zwobble.couscous.ast; -import org.zwobble.couscous.ast.visitors.ExpressionNodeMapper; import org.zwobble.couscous.ast.visitors.NodeTransformer; import org.zwobble.couscous.types.Type; public interface ExpressionNode extends Node { Type getType(); - T accept(ExpressionNodeMapper visitor); - - ExpressionNode transform(NodeTransformer transformer); } diff --git a/src/main/java/org/zwobble/couscous/ast/FieldAccessNode.java b/src/main/java/org/zwobble/couscous/ast/FieldAccessNode.java index e4c422f..f3470ee 100644 --- a/src/main/java/org/zwobble/couscous/ast/FieldAccessNode.java +++ b/src/main/java/org/zwobble/couscous/ast/FieldAccessNode.java @@ -1,6 +1,5 @@ package org.zwobble.couscous.ast; -import org.zwobble.couscous.ast.visitors.ExpressionNodeMapper; import org.zwobble.couscous.ast.visitors.NodeTransformer; import org.zwobble.couscous.types.ScalarType; import org.zwobble.couscous.types.Type; @@ -60,11 +59,6 @@ public class FieldAccessNode implements AssignableExpressionNode { return type; } - @Override - public T accept(ExpressionNodeMapper visitor) { - return visitor.visit(this); - } - @Override public int type() { return NodeTypes.FIELD_ACCESS; diff --git a/src/main/java/org/zwobble/couscous/ast/InstanceOfNode.java b/src/main/java/org/zwobble/couscous/ast/InstanceOfNode.java index f2dcc0b..ea4200d 100644 --- a/src/main/java/org/zwobble/couscous/ast/InstanceOfNode.java +++ b/src/main/java/org/zwobble/couscous/ast/InstanceOfNode.java @@ -1,6 +1,5 @@ package org.zwobble.couscous.ast; -import org.zwobble.couscous.ast.visitors.ExpressionNodeMapper; import org.zwobble.couscous.ast.visitors.NodeTransformer; import org.zwobble.couscous.types.ScalarType; import org.zwobble.couscous.types.Type; @@ -29,11 +28,6 @@ public class InstanceOfNode implements ExpressionNode { return Types.BOOLEAN; } - @Override - public T accept(ExpressionNodeMapper visitor) { - return visitor.visit(this); - } - @Override public int type() { return NodeTypes.INSTANCE_OF; diff --git a/src/main/java/org/zwobble/couscous/ast/LiteralNode.java b/src/main/java/org/zwobble/couscous/ast/LiteralNode.java index b8d8735..1522c7f 100644 --- a/src/main/java/org/zwobble/couscous/ast/LiteralNode.java +++ b/src/main/java/org/zwobble/couscous/ast/LiteralNode.java @@ -1,6 +1,5 @@ package org.zwobble.couscous.ast; -import org.zwobble.couscous.ast.visitors.ExpressionNodeMapper; import org.zwobble.couscous.ast.visitors.NodeTransformer; import org.zwobble.couscous.types.ScalarType; import org.zwobble.couscous.types.Type; @@ -54,11 +53,6 @@ public class LiteralNode implements ExpressionNode { return value; } - @Override - public T accept(ExpressionNodeMapper visitor) { - return visitor.visit(this); - } - @Override public int type() { return NodeTypes.LITERAL; diff --git a/src/main/java/org/zwobble/couscous/ast/MethodCallNode.java b/src/main/java/org/zwobble/couscous/ast/MethodCallNode.java index 381fb11..0d78c40 100644 --- a/src/main/java/org/zwobble/couscous/ast/MethodCallNode.java +++ b/src/main/java/org/zwobble/couscous/ast/MethodCallNode.java @@ -1,6 +1,5 @@ package org.zwobble.couscous.ast; -import org.zwobble.couscous.ast.visitors.ExpressionNodeMapper; import org.zwobble.couscous.ast.visitors.NodeTransformer; import org.zwobble.couscous.types.ScalarType; import org.zwobble.couscous.types.Type; @@ -154,11 +153,6 @@ public class MethodCallNode implements ExpressionNode { return signature; } - @Override - public T accept(ExpressionNodeMapper visitor) { - return visitor.visit(this); - } - @Override public int type() { return NodeTypes.METHOD_CALL; diff --git a/src/main/java/org/zwobble/couscous/ast/OperationNode.java b/src/main/java/org/zwobble/couscous/ast/OperationNode.java index 44f2d1f..1a838bd 100644 --- a/src/main/java/org/zwobble/couscous/ast/OperationNode.java +++ b/src/main/java/org/zwobble/couscous/ast/OperationNode.java @@ -1,8 +1,7 @@ package org.zwobble.couscous.ast; -import org.zwobble.couscous.types.Type; -import org.zwobble.couscous.ast.visitors.ExpressionNodeMapper; import org.zwobble.couscous.ast.visitors.NodeTransformer; +import org.zwobble.couscous.types.Type; import java.util.List; @@ -46,11 +45,6 @@ public class OperationNode implements ExpressionNode { return type; } - @Override - public T accept(ExpressionNodeMapper visitor) { - return visitor.visit(this); - } - @Override public int type() { return NodeTypes.OPERATION; diff --git a/src/main/java/org/zwobble/couscous/ast/TernaryConditionalNode.java b/src/main/java/org/zwobble/couscous/ast/TernaryConditionalNode.java index 0d2ecda..979bd33 100644 --- a/src/main/java/org/zwobble/couscous/ast/TernaryConditionalNode.java +++ b/src/main/java/org/zwobble/couscous/ast/TernaryConditionalNode.java @@ -1,8 +1,7 @@ package org.zwobble.couscous.ast; -import org.zwobble.couscous.types.Type; -import org.zwobble.couscous.ast.visitors.ExpressionNodeMapper; import org.zwobble.couscous.ast.visitors.NodeTransformer; +import org.zwobble.couscous.types.Type; import org.zwobble.couscous.util.ExtraIterables; public class TernaryConditionalNode implements ExpressionNode { @@ -38,11 +37,6 @@ public class TernaryConditionalNode implements ExpressionNode { return ifFalse; } - @Override - public T accept(ExpressionNodeMapper visitor) { - return visitor.visit(this); - } - @Override public int type() { return NodeTypes.TERNARY_CONDITIONAL; diff --git a/src/main/java/org/zwobble/couscous/ast/ThisReferenceNode.java b/src/main/java/org/zwobble/couscous/ast/ThisReferenceNode.java index 8da97e6..5b80b9c 100644 --- a/src/main/java/org/zwobble/couscous/ast/ThisReferenceNode.java +++ b/src/main/java/org/zwobble/couscous/ast/ThisReferenceNode.java @@ -1,8 +1,7 @@ package org.zwobble.couscous.ast; -import org.zwobble.couscous.types.Type; -import org.zwobble.couscous.ast.visitors.ExpressionNodeMapper; import org.zwobble.couscous.ast.visitors.NodeTransformer; +import org.zwobble.couscous.types.Type; import org.zwobble.couscous.util.ExtraIterables; public class ThisReferenceNode implements ExpressionNode, ReferenceNode { @@ -20,11 +19,6 @@ public class ThisReferenceNode implements ExpressionNode, ReferenceNode { return type; } - @Override - public T accept(ExpressionNodeMapper visitor) { - return visitor.visit(this); - } - @Override public T accept(Visitor visitor) { return visitor.visit(this); diff --git a/src/main/java/org/zwobble/couscous/ast/TypeCoercionNode.java b/src/main/java/org/zwobble/couscous/ast/TypeCoercionNode.java index 9e4507d..1c8ee6e 100644 --- a/src/main/java/org/zwobble/couscous/ast/TypeCoercionNode.java +++ b/src/main/java/org/zwobble/couscous/ast/TypeCoercionNode.java @@ -1,8 +1,7 @@ package org.zwobble.couscous.ast; -import org.zwobble.couscous.types.Type; -import org.zwobble.couscous.ast.visitors.ExpressionNodeMapper; import org.zwobble.couscous.ast.visitors.NodeTransformer; +import org.zwobble.couscous.types.Type; import org.zwobble.couscous.util.ExtraIterables; import static org.zwobble.couscous.types.Types.concrete; @@ -37,11 +36,6 @@ public class TypeCoercionNode implements ExpressionNode { return type; } - @Override - public T accept(ExpressionNodeMapper visitor) { - return visitor.visit(this); - } - @Override public int type() { return NodeTypes.TYPE_COERCION; diff --git a/src/main/java/org/zwobble/couscous/ast/VariableReferenceNode.java b/src/main/java/org/zwobble/couscous/ast/VariableReferenceNode.java index 96f2fdf..0763fc4 100644 --- a/src/main/java/org/zwobble/couscous/ast/VariableReferenceNode.java +++ b/src/main/java/org/zwobble/couscous/ast/VariableReferenceNode.java @@ -1,9 +1,8 @@ package org.zwobble.couscous.ast; import org.zwobble.couscous.ast.identifiers.Identifier; -import org.zwobble.couscous.types.Type; -import org.zwobble.couscous.ast.visitors.ExpressionNodeMapper; import org.zwobble.couscous.ast.visitors.NodeTransformer; +import org.zwobble.couscous.types.Type; import org.zwobble.couscous.util.ExtraIterables; public class VariableReferenceNode implements AssignableExpressionNode, ReferenceNode { @@ -25,11 +24,6 @@ public class VariableReferenceNode implements AssignableExpressionNode, Referenc return referent; } - @Override - public T accept(ExpressionNodeMapper visitor) { - return visitor.visit(this); - } - public Identifier getReferentId() { return referent.getId(); } diff --git a/src/main/java/org/zwobble/couscous/ast/visitors/ExpressionNodeMapper.java b/src/main/java/org/zwobble/couscous/ast/visitors/ExpressionNodeMapper.java deleted file mode 100644 index acc972a..0000000 --- a/src/main/java/org/zwobble/couscous/ast/visitors/ExpressionNodeMapper.java +++ /dev/null @@ -1,19 +0,0 @@ -package org.zwobble.couscous.ast.visitors; - -import org.zwobble.couscous.ast.*; - -public interface ExpressionNodeMapper { - T visit(LiteralNode literal); - T visit(VariableReferenceNode variableReference); - T visit(ThisReferenceNode reference); - T visit(ArrayNode array); - T visit(AssignmentNode assignment); - T visit(TernaryConditionalNode ternaryConditional); - T visit(MethodCallNode methodCall); - T visit(ConstructorCallNode call); - T visit(OperationNode operation); - T visit(InstanceOfNode instanceOf); - T visit(FieldAccessNode fieldAccess); - T visit(TypeCoercionNode typeCoercion); - T visit(CastNode cast); -} diff --git a/src/main/java/org/zwobble/couscous/backends/python/PythonCodeGenerator.java b/src/main/java/org/zwobble/couscous/backends/python/PythonCodeGenerator.java index c520e2a..7b016bf 100644 --- a/src/main/java/org/zwobble/couscous/backends/python/PythonCodeGenerator.java +++ b/src/main/java/org/zwobble/couscous/backends/python/PythonCodeGenerator.java @@ -7,7 +7,6 @@ import com.google.common.collect.Iterators; import org.zwobble.couscous.ast.*; import org.zwobble.couscous.ast.structure.NodeStructure; import org.zwobble.couscous.ast.visitors.DynamicNodeMapper; -import org.zwobble.couscous.ast.visitors.ExpressionNodeMapper; import org.zwobble.couscous.backends.naming.Names; import org.zwobble.couscous.backends.python.ast.*; import org.zwobble.couscous.types.ScalarType; @@ -252,7 +251,7 @@ public class PythonCodeGenerator { public PythonStatementNode visit(ExpressionStatementNode expressionStatement) { if (expressionStatement.getExpression() instanceof AssignmentNode) { AssignmentNode assignment = (AssignmentNode)expressionStatement.getExpression(); - return pythonAssignment(assignment.getTarget().accept(EXPRESSION_GENERATOR), generateExpression(assignment.getValue())); + return pythonAssignment(generateExpression(assignment.getTarget()), generateExpression(assignment.getValue())); } else { return pythonExpressionStatement(generateExpression(expressionStatement.getExpression())); } @@ -277,7 +276,7 @@ public class PythonCodeGenerator { } public static PythonExpressionNode generateExpression(ExpressionNode expression) { - return expression.accept(EXPRESSION_GENERATOR); + return ExpressionGenerator.VISITOR.apply(expression); } private static List generateExpressions(Iterable expressions) { @@ -285,40 +284,32 @@ public class PythonCodeGenerator { } private static final ExpressionGenerator EXPRESSION_GENERATOR = new ExpressionGenerator(); - private static class ExpressionGenerator implements ExpressionNodeMapper { - @Override + public static class ExpressionGenerator { + private static final Function VISITOR = + DynamicNodeMapper.instantiate(new ExpressionGenerator(), "visit"); + public PythonExpressionNode visit(LiteralNode literal) { return generateCode(literal.getValue()); } - @Override public PythonVariableReferenceNode visit(VariableReferenceNode variableReference) { return pythonVariableReference(variableReference.getReferent().getName()); } - @Override public PythonExpressionNode visit(ThisReferenceNode reference) { return pythonVariableReference("self"); } - @Override public PythonExpressionNode visit(ArrayNode array) { return pythonList(eagerMap( array.getElements(), PythonCodeGenerator::generateExpression)); } - @Override - public PythonExpressionNode visit(AssignmentNode assignment) { - throw new UnsupportedOperationException(); - } - - @Override public PythonExpressionNode visit(TernaryConditionalNode ternaryConditional) { return pythonConditionalExpression(generateExpression(ternaryConditional.getCondition()), generateExpression(ternaryConditional.getIfTrue()), generateExpression(ternaryConditional.getIfFalse())); } - @Override public PythonExpressionNode visit(MethodCallNode methodCall) { PythonExpressionNode receiver = generateReceiver(methodCall.getReceiver()); List arguments = generateExpressions(methodCall.getArguments()); @@ -347,7 +338,6 @@ public class PythonCodeGenerator { }); } - @Override public PythonExpressionNode visit(ConstructorCallNode call) { final Type className = call.getType(); final org.zwobble.couscous.backends.python.ast.PythonVariableReferenceNode classReference = typeReference(className); @@ -355,23 +345,14 @@ public class PythonCodeGenerator { return pythonCall(classReference, arguments); } - @Override public PythonExpressionNode visit(OperationNode operation) { return generateExpression(operation.desugar()); } - @Override - public PythonExpressionNode visit(InstanceOfNode instanceOf) { - // TODO: - throw new UnsupportedOperationException(); - } - - @Override public PythonExpressionNode visit(FieldAccessNode fieldAccess) { return pythonAttributeAccess(generateReceiver(fieldAccess.getLeft()), fieldAccess.getFieldName()); } - @Override public PythonExpressionNode visit(TypeCoercionNode typeCoercion) { PythonExpressionNode value = generateExpression(typeCoercion.getExpression()); if (isIntegerBox(typeCoercion)) { @@ -386,7 +367,6 @@ public class PythonCodeGenerator { } } - @Override public PythonExpressionNode visit(CastNode cast) { // TODO: implement this properly // Can't test this properly (i.e. in one test, rather than one per backend) diff --git a/src/main/java/org/zwobble/couscous/interpreter/Evaluator.java b/src/main/java/org/zwobble/couscous/interpreter/Evaluator.java index 75eeb76..dc23575 100644 --- a/src/main/java/org/zwobble/couscous/interpreter/Evaluator.java +++ b/src/main/java/org/zwobble/couscous/interpreter/Evaluator.java @@ -1,8 +1,8 @@ package org.zwobble.couscous.interpreter; import org.zwobble.couscous.ast.*; +import org.zwobble.couscous.ast.visitors.DynamicNodeMapper; import org.zwobble.couscous.ast.visitors.DynamicNodeVisitor; -import org.zwobble.couscous.ast.visitors.ExpressionNodeMapper; import org.zwobble.couscous.interpreter.errors.ConditionMustBeBoolean; import org.zwobble.couscous.interpreter.errors.InvalidCast; import org.zwobble.couscous.interpreter.values.*; @@ -13,6 +13,7 @@ import org.zwobble.couscous.types.Types; import java.util.List; import java.util.function.BiConsumer; +import java.util.function.BiFunction; import java.util.stream.Collectors; import static org.zwobble.couscous.types.Types.erasure; @@ -20,7 +21,7 @@ import static org.zwobble.couscous.util.Casts.tryCast; import static org.zwobble.couscous.util.ExtraLists.eagerMap; import static org.zwobble.couscous.util.ExtraLists.list; -public class Evaluator implements ExpressionNodeMapper { +public class Evaluator { public static InterpreterValue eval(Environment environment, ExpressionNode expression) { return new Evaluator(environment).eval(expression); } @@ -28,6 +29,8 @@ public class Evaluator implements ExpressionNodeMapper { public static boolean evalCondition(Environment environment, ExpressionNode expression) { return new Evaluator(environment).evalCondition(expression); } + + private static final BiFunction EVAL = DynamicNodeMapper.visitor(Evaluator.class, "visit"); private final Environment environment; @@ -36,20 +39,17 @@ public class Evaluator implements ExpressionNodeMapper { } public InterpreterValue eval(ExpressionNode expression) { - return expression.accept(this); + return EVAL.apply(expression, this); } - @Override public InterpreterValue visit(LiteralNode literal) { return InterpreterValues.value(literal.getValue()); } - @Override public InterpreterValue visit(VariableReferenceNode variableReference) { return environment.get(variableReference.getReferentId()); } - @Override public InterpreterValue visit(ThisReferenceNode reference) { InterpreterValue thisValue = environment.getThis().get(); // TODO: add a test for this @@ -57,14 +57,12 @@ public class Evaluator implements ExpressionNodeMapper { return thisValue; } - @Override public InterpreterValue visit(ArrayNode array) { return new ArrayInterpreterValue( array.getElementType(), eagerMap(array.getElements(), this::eval)); } - @Override public InterpreterValue visit(AssignmentNode assignment) { InterpreterValue value = eval(assignment.getValue()); AssignableExpressionVisitor.visit.accept(assignment.getTarget(), new AssignableExpressionVisitor() { @@ -89,7 +87,6 @@ public class Evaluator implements ExpressionNodeMapper { void visit(FieldAccessNode node); } - @Override public InterpreterValue visit(TernaryConditionalNode ternaryConditional) { boolean condition = evalCondition(ternaryConditional.getCondition()); ExpressionNode branch = condition ? ternaryConditional.getIfTrue() : ternaryConditional.getIfFalse(); @@ -104,7 +101,6 @@ public class Evaluator implements ExpressionNodeMapper { return ((BooleanInterpreterValue)value).getValue(); } - @Override public InterpreterValue visit(MethodCallNode methodCall) { List arguments = evalArguments(methodCall.getArguments()); MethodSignature signature = methodCall.signature(); @@ -113,7 +109,6 @@ public class Evaluator implements ExpressionNodeMapper { .callMethod(environment, signature.generic(), new Arguments(list(), arguments)); } - @Override public InterpreterValue visit(ConstructorCallNode call) { StaticReceiverValue clazz = environment.findClass(erasure(call.getType())); List arguments = evalArguments(call.getArguments()); @@ -123,24 +118,15 @@ public class Evaluator implements ExpressionNodeMapper { return clazz.callConstructor(environment, new Arguments(typeParameters, arguments)); } - @Override public InterpreterValue visit(OperationNode operation) { return eval(operation.desugar()); } - @Override - public InterpreterValue visit(InstanceOfNode instanceOf) { - // TODO: - throw new UnsupportedOperationException(); - } - - @Override public InterpreterValue visit(FieldAccessNode fieldAccess) { ReceiverValue left = evalReceiver(fieldAccess.getLeft()); return left.getField(fieldAccess.getFieldName()); } - @Override public InterpreterValue visit(TypeCoercionNode typeCoercion) { // TODO: check that the type coercion is valid // TODO: boxing booleans @@ -154,7 +140,6 @@ public class Evaluator implements ExpressionNodeMapper { } } - @Override public InterpreterValue visit(CastNode cast) { InterpreterValue value = eval(cast.getExpression()); if (!InterpreterTypes.isSubType(cast.getType(), value.getType())) { -- cgit v1.2.3