diff options
| author | Michael Williamson <mike@zwobble.org> | 2016-01-17 18:27:09 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2016-01-17 18:27:09 +0000 |
| commit | 012f0874a3f55b9303b9514f400acc28e7c84e09 (patch) | |
| tree | da56543c0f465915e870c9e791eb40590758d62a /src/main/java/org/zwobble | |
| parent | 2368822a1d143e9fd677f02b0b944bbace0c911d (diff) | |
Tidy up semantics of expression transformations
Diffstat (limited to 'src/main/java/org/zwobble')
3 files changed, 18 insertions, 14 deletions
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<ExpressionNode, ExpressionNode> 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<ExpressionNode, ExpressionNode> 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<ExpressionNode>, St return type; } - public ExpressionNode visit(ExpressionNode value) { + public final ExpressionNode visit(ExpressionNode value) { return value.accept((ExpressionNodeMapper<ExpressionNode>)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<ExpressionNode>, 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<StatementNode>)this); } |
