From 012f0874a3f55b9303b9514f400acc28e7c84e09 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sun, 17 Jan 2016 18:27:09 +0000 Subject: Tidy up semantics of expression transformations --- .../org/zwobble/couscous/ast/ExpressionNode.java | 2 +- .../org/zwobble/couscous/ast/StatementNode.java | 2 +- .../couscous/ast/visitors/NodeTransformer.java | 28 ++++++++++++---------- 3 files changed, 18 insertions(+), 14 deletions(-) (limited to 'src/main/java') diff --git a/src/main/java/org/zwobble/couscous/ast/ExpressionNode.java b/src/main/java/org/zwobble/couscous/ast/ExpressionNode.java index 79a0cd9..6f419dc 100644 --- a/src/main/java/org/zwobble/couscous/ast/ExpressionNode.java +++ b/src/main/java/org/zwobble/couscous/ast/ExpressionNode.java @@ -70,7 +70,7 @@ public interface ExpressionNode extends Node { default ExpressionNode replaceExpressions(Function replace) { return transform(new NodeTransformer() { @Override - public ExpressionNode visit(ExpressionNode value) { + public ExpressionNode defaultTransformExpression(ExpressionNode value) { return replace.apply(value); } }); diff --git a/src/main/java/org/zwobble/couscous/ast/StatementNode.java b/src/main/java/org/zwobble/couscous/ast/StatementNode.java index 87b1319..c200715 100644 --- a/src/main/java/org/zwobble/couscous/ast/StatementNode.java +++ b/src/main/java/org/zwobble/couscous/ast/StatementNode.java @@ -43,7 +43,7 @@ public interface StatementNode extends Node { default StatementNode replaceExpressions(Function replace) { return transform(new NodeTransformer() { @Override - public ExpressionNode visit(ExpressionNode value) { + public ExpressionNode defaultTransformExpression(ExpressionNode value) { return replace.apply(value); } }); 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 2b68afc..158b3ce 100644 --- a/src/main/java/org/zwobble/couscous/ast/visitors/NodeTransformer.java +++ b/src/main/java/org/zwobble/couscous/ast/visitors/NodeTransformer.java @@ -17,58 +17,62 @@ public class NodeTransformer implements ExpressionNodeMapper, St return type; } - public ExpressionNode visit(ExpressionNode value) { + public final ExpressionNode visit(ExpressionNode value) { return value.accept((ExpressionNodeMapper)this); } @Override public ExpressionNode visit(LiteralNode literal) { - return literal.transform(this); + return defaultTransformExpression(literal); } @Override public ExpressionNode visit(VariableReferenceNode variableReference) { - return variableReference.transform(this); + return defaultTransformExpression(variableReference); } @Override public ExpressionNode visit(ThisReferenceNode reference) { - return reference.transform(this); + return defaultTransformExpression(reference); } @Override public ExpressionNode visit(AssignmentNode assignment) { - return assignment.transform(this); + return defaultTransformExpression(assignment); } @Override public ExpressionNode visit(TernaryConditionalNode ternaryConditional) { - return ternaryConditional.transform(this); + return defaultTransformExpression(ternaryConditional); } @Override public ExpressionNode visit(MethodCallNode methodCall) { - return methodCall.transform(this); + return defaultTransformExpression(methodCall); } @Override public ExpressionNode visit(ConstructorCallNode call) { - return call.transform(this); + return defaultTransformExpression(call); } @Override public ExpressionNode visit(FieldAccessNode fieldAccess) { - return fieldAccess.transform(this); + return defaultTransformExpression(fieldAccess); } @Override public ExpressionNode visit(TypeCoercionNode typeCoercion) { - return typeCoercion.transform(this); + return defaultTransformExpression(typeCoercion); } @Override public ExpressionNode visit(CastNode cast) { - return cast.transform(this); + return defaultTransformExpression(cast); + } + + protected ExpressionNode defaultTransformExpression(ExpressionNode expression) { + return expression.transform(this); } public Receiver visit(Receiver receiver) { @@ -90,7 +94,7 @@ public class NodeTransformer implements ExpressionNodeMapper, St return VariableDeclaration.var(declaration.getId(), declaration.getName(), transform(declaration.getType())); } - public StatementNode visit(StatementNode statement) { + public final StatementNode visit(StatementNode statement) { return statement.accept((StatementNodeMapper)this); } -- cgit v1.2.3