aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-01-17 18:27:09 +0000
committerMichael Williamson <mike@zwobble.org>2016-01-17 18:27:09 +0000
commit012f0874a3f55b9303b9514f400acc28e7c84e09 (patch)
treeda56543c0f465915e870c9e791eb40590758d62a /src/main/java/org/zwobble
parent2368822a1d143e9fd677f02b0b944bbace0c911d (diff)
Tidy up semantics of expression transformations
Diffstat (limited to 'src/main/java/org/zwobble')
-rw-r--r--src/main/java/org/zwobble/couscous/ast/ExpressionNode.java2
-rw-r--r--src/main/java/org/zwobble/couscous/ast/StatementNode.java2
-rw-r--r--src/main/java/org/zwobble/couscous/ast/visitors/NodeTransformer.java28
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);
}