diff options
| author | Michael Williamson <mike@zwobble.org> | 2016-07-14 15:42:46 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2016-07-14 15:42:46 +0100 |
| commit | 6d5608b5061bc7b5e40db9c37f186cfd0d48a3e6 (patch) | |
| tree | 907fdc6e15073acfd6bcfd8c32374dd3a07ecc0a /src/main/java | |
| parent | 9ff6b49ca2c559d6938715fd0b48bb8c3e2c1d19 (diff) | |
Move transform onto Node interface
Diffstat (limited to 'src/main/java')
3 files changed, 3 insertions, 160 deletions
diff --git a/src/main/java/org/zwobble/couscous/ast/Node.java b/src/main/java/org/zwobble/couscous/ast/Node.java index ef4ab09..32cd4d8 100644 --- a/src/main/java/org/zwobble/couscous/ast/Node.java +++ b/src/main/java/org/zwobble/couscous/ast/Node.java @@ -1,9 +1,11 @@ package org.zwobble.couscous.ast; import org.zwobble.couscous.ast.visitors.NodeMapper; +import org.zwobble.couscous.ast.visitors.NodeTransformer; public interface Node { int type(); Iterable<? extends Node> childNodes(); <T> T accept(NodeMapper<T> visitor); + Node transform(NodeTransformer transformer); } diff --git a/src/main/java/org/zwobble/couscous/ast/visitors/NodeTransformer.java b/src/main/java/org/zwobble/couscous/ast/visitors/NodeTransformer.java index 27116ae..721ed8e 100644 --- a/src/main/java/org/zwobble/couscous/ast/visitors/NodeTransformer.java +++ b/src/main/java/org/zwobble/couscous/ast/visitors/NodeTransformer.java @@ -28,165 +28,6 @@ public class NodeTransformer { return new Builder(); } - public Node transform(Node node) { - return node.accept(new NodeMapper<Node>() { - @Override - public Node visit(LiteralNode literal) { - return transformExpression(literal); - } - - @Override - public Node visit(VariableReferenceNode variableReference) { - return transformExpression(variableReference); - } - - @Override - public Node visit(ThisReferenceNode reference) { - return transformExpression(reference); - } - - @Override - public Node visit(ArrayNode array) { - return transformExpression(array); - } - - @Override - public Node visit(AssignmentNode assignment) { - return transformExpression(assignment); - } - - @Override - public Node visit(TernaryConditionalNode ternaryConditional) { - return transformExpression(ternaryConditional); - } - - @Override - public Node visit(MethodCallNode methodCall) { - return transformExpression(methodCall); - } - - @Override - public Node visit(ConstructorCallNode call) { - return transformExpression(call); - } - - @Override - public Node visit(OperationNode operation) { - return transformExpression(operation); - } - - @Override - public Node visit(InstanceOfNode instanceOf) { - return transformExpression(instanceOf); - } - - @Override - public Node visit(FieldAccessNode fieldAccess) { - return transformExpression(fieldAccess); - } - - @Override - public Node visit(TypeCoercionNode typeCoercion) { - return transformExpression(typeCoercion); - } - - @Override - public Node visit(CastNode cast) { - return transformExpression(cast); - } - - @Override - public Node visit(InstanceReceiver receiver) { - return transformReceiver(receiver); - } - - @Override - public Node visit(StaticReceiver receiver) { - return transformReceiver(receiver); - } - - @Override - public Node visit(ReturnNode returnNode) { - return transformStatement(returnNode); - } - - @Override - public Node visit(ThrowNode throwNode) { - return transformStatement(throwNode); - } - - @Override - public Node visit(ExpressionStatementNode expressionStatement) { - return transformStatement(expressionStatement); - } - - @Override - public Node visit(LocalVariableDeclarationNode localVariableDeclaration) { - return transformStatement(localVariableDeclaration); - } - - @Override - public Node visit(IfStatementNode ifStatement) { - return transformStatement(ifStatement); - } - - @Override - public Node visit(WhileNode whileLoop) { - return transformStatement(whileLoop); - } - - @Override - public Node visit(TryNode tryStatement) { - return transformStatement(tryStatement); - } - - @Override - public Node visit(FormalTypeParameterNode parameter) { - return transformFormalTypeParameter(parameter); - } - - @Override - public Node visit(FormalArgumentNode formalArgumentNode) { - return transformFormalArgument(formalArgumentNode); - } - - @Override - public Node visit(AnnotationNode annotation) { - return transformAnnotation(annotation); - } - - @Override - public Node visit(MethodNode methodNode) { - return transformMethod(methodNode); - } - - @Override - public Node visit(ConstructorNode constructorNode) { - return transformConstructor(constructorNode); - } - - @Override - public Node visit(FieldDeclarationNode declaration) { - return transformField(declaration); - } - - @Override - public Node visit(ClassNode classNode) { - return transformClass(classNode); - } - - @Override - public Node visit(InterfaceNode interfaceNode) { - return transformInterface(interfaceNode); - } - - @Override - public Node visit(EnumNode enumNode) { - return transformEnum(enumNode); - } - }); - } - public static class Builder { private Function<ExpressionNode, Optional<ExpressionNode>> transformExpression = expression -> Optional.empty(); private Function<Type, Type> transformType = type -> type; diff --git a/src/main/java/org/zwobble/couscous/backends/csharp/CsharpCodeGenerator.java b/src/main/java/org/zwobble/couscous/backends/csharp/CsharpCodeGenerator.java index cb17dc7..537184c 100644 --- a/src/main/java/org/zwobble/couscous/backends/csharp/CsharpCodeGenerator.java +++ b/src/main/java/org/zwobble/couscous/backends/csharp/CsharpCodeGenerator.java @@ -48,7 +48,7 @@ public class CsharpCodeGenerator { } private Node generateCode(Node node) { - return nodeTransformer.transform(node); + return node.transform(nodeTransformer); } private Type transformType(Type type) { |
