aboutsummaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-07-14 15:42:46 +0100
committerMichael Williamson <mike@zwobble.org>2016-07-14 15:42:46 +0100
commit6d5608b5061bc7b5e40db9c37f186cfd0d48a3e6 (patch)
tree907fdc6e15073acfd6bcfd8c32374dd3a07ecc0a /src/main
parent9ff6b49ca2c559d6938715fd0b48bb8c3e2c1d19 (diff)
Move transform onto Node interface
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/org/zwobble/couscous/ast/Node.java2
-rw-r--r--src/main/java/org/zwobble/couscous/ast/visitors/NodeTransformer.java159
-rw-r--r--src/main/java/org/zwobble/couscous/backends/csharp/CsharpCodeGenerator.java2
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) {