aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main/java/org/zwobble/couscous/ast/AssignmentNode.java8
-rw-r--r--src/main/java/org/zwobble/couscous/ast/CastNode.java6
-rw-r--r--src/main/java/org/zwobble/couscous/ast/ConstructorCallNode.java7
-rw-r--r--src/main/java/org/zwobble/couscous/ast/ExpressionNode.java12
-rw-r--r--src/main/java/org/zwobble/couscous/ast/FieldAccessNode.java6
-rw-r--r--src/main/java/org/zwobble/couscous/ast/LiteralNode.java6
-rw-r--r--src/main/java/org/zwobble/couscous/ast/MethodCallNode.java9
-rw-r--r--src/main/java/org/zwobble/couscous/ast/TernaryConditionalNode.java9
-rw-r--r--src/main/java/org/zwobble/couscous/ast/ThisReferenceNode.java8
-rw-r--r--src/main/java/org/zwobble/couscous/ast/TypeCoercionNode.java6
-rw-r--r--src/main/java/org/zwobble/couscous/ast/VariableReferenceNode.java8
-rw-r--r--src/main/java/org/zwobble/couscous/ast/visitors/NodeTransformer.java2
12 files changed, 15 insertions, 72 deletions
diff --git a/src/main/java/org/zwobble/couscous/ast/AssignmentNode.java b/src/main/java/org/zwobble/couscous/ast/AssignmentNode.java
index dd1a9f3..b027399 100644
--- a/src/main/java/org/zwobble/couscous/ast/AssignmentNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/AssignmentNode.java
@@ -3,8 +3,6 @@ package org.zwobble.couscous.ast;
import org.zwobble.couscous.ast.visitors.ExpressionNodeMapper;
import org.zwobble.couscous.ast.visitors.NodeTransformer;
-import java.util.function.Function;
-
import static org.zwobble.couscous.ast.ExpressionStatementNode.expressionStatement;
import static org.zwobble.couscous.ast.VariableReferenceNode.reference;
@@ -47,12 +45,6 @@ public class AssignmentNode implements ExpressionNode {
}
@Override
- public ExpressionNode replaceExpressions(Function<ExpressionNode, ExpressionNode> replace) {
- return new AssignmentNode(
- (AssignableExpressionNode) replace.apply(target),
- replace.apply(value));
- }
-
public ExpressionNode transform(NodeTransformer transformer) {
return new AssignmentNode(
(AssignableExpressionNode) transformer.visit(target),
diff --git a/src/main/java/org/zwobble/couscous/ast/CastNode.java b/src/main/java/org/zwobble/couscous/ast/CastNode.java
index 1f61941..858779e 100644
--- a/src/main/java/org/zwobble/couscous/ast/CastNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/CastNode.java
@@ -3,8 +3,6 @@ package org.zwobble.couscous.ast;
import org.zwobble.couscous.ast.visitors.ExpressionNodeMapper;
import org.zwobble.couscous.ast.visitors.NodeTransformer;
-import java.util.function.Function;
-
public class CastNode implements ExpressionNode {
public static ExpressionNode cast(ExpressionNode expression, TypeName type) {
return new CastNode(expression, type);
@@ -33,10 +31,6 @@ public class CastNode implements ExpressionNode {
}
@Override
- public ExpressionNode replaceExpressions(Function<ExpressionNode, ExpressionNode> replace) {
- return new CastNode(replace.apply(expression), type);
- }
-
public ExpressionNode transform(NodeTransformer transformer) {
return new CastNode(transformer.visit(expression), transformer.transform(type));
}
diff --git a/src/main/java/org/zwobble/couscous/ast/ConstructorCallNode.java b/src/main/java/org/zwobble/couscous/ast/ConstructorCallNode.java
index ecbdc00..b5439bf 100644
--- a/src/main/java/org/zwobble/couscous/ast/ConstructorCallNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/ConstructorCallNode.java
@@ -4,9 +4,6 @@ import org.zwobble.couscous.ast.visitors.ExpressionNodeMapper;
import org.zwobble.couscous.ast.visitors.NodeTransformer;
import java.util.List;
-import java.util.function.Function;
-
-import static org.zwobble.couscous.util.ExtraLists.eagerMap;
public class ConstructorCallNode implements ExpressionNode {
public static ConstructorCallNode constructorCall(
@@ -40,10 +37,6 @@ public class ConstructorCallNode implements ExpressionNode {
}
@Override
- public ExpressionNode replaceExpressions(Function<ExpressionNode, ExpressionNode> replace) {
- return new ConstructorCallNode(type, eagerMap(arguments, replace::apply));
- }
-
public ExpressionNode transform(NodeTransformer transformer) {
return new ConstructorCallNode(
transformer.transform(type),
diff --git a/src/main/java/org/zwobble/couscous/ast/ExpressionNode.java b/src/main/java/org/zwobble/couscous/ast/ExpressionNode.java
index d07b485..79a0cd9 100644
--- a/src/main/java/org/zwobble/couscous/ast/ExpressionNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/ExpressionNode.java
@@ -2,6 +2,7 @@ package org.zwobble.couscous.ast;
import org.zwobble.couscous.ast.visitors.ExpressionNodeMapper;
import org.zwobble.couscous.ast.visitors.NodeMapper;
+import org.zwobble.couscous.ast.visitors.NodeTransformer;
import java.util.function.Function;
@@ -64,5 +65,14 @@ public interface ExpressionNode extends Node {
});
}
- ExpressionNode replaceExpressions(Function<ExpressionNode, ExpressionNode> replace);
+ ExpressionNode transform(NodeTransformer transformer);
+
+ default ExpressionNode replaceExpressions(Function<ExpressionNode, ExpressionNode> replace) {
+ return transform(new NodeTransformer() {
+ @Override
+ public ExpressionNode visit(ExpressionNode value) {
+ return replace.apply(value);
+ }
+ });
+ }
}
diff --git a/src/main/java/org/zwobble/couscous/ast/FieldAccessNode.java b/src/main/java/org/zwobble/couscous/ast/FieldAccessNode.java
index 3224b5d..6d88d28 100644
--- a/src/main/java/org/zwobble/couscous/ast/FieldAccessNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/FieldAccessNode.java
@@ -4,8 +4,6 @@ import org.zwobble.couscous.ast.visitors.AssignableExpressionNodeVisitor;
import org.zwobble.couscous.ast.visitors.ExpressionNodeMapper;
import org.zwobble.couscous.ast.visitors.NodeTransformer;
-import java.util.function.Function;
-
public class FieldAccessNode implements AssignableExpressionNode {
public static FieldAccessNode fieldAccess(
ExpressionNode left,
@@ -45,10 +43,6 @@ public class FieldAccessNode implements AssignableExpressionNode {
}
@Override
- public ExpressionNode replaceExpressions(Function<ExpressionNode, ExpressionNode> replace) {
- return new FieldAccessNode(replace.apply(left), fieldName, type);
- }
-
public ExpressionNode transform(NodeTransformer transformer) {
return new FieldAccessNode(
transformer.visit(left),
diff --git a/src/main/java/org/zwobble/couscous/ast/LiteralNode.java b/src/main/java/org/zwobble/couscous/ast/LiteralNode.java
index 5753650..923bb2f 100644
--- a/src/main/java/org/zwobble/couscous/ast/LiteralNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/LiteralNode.java
@@ -4,8 +4,6 @@ import org.zwobble.couscous.ast.visitors.ExpressionNodeMapper;
import org.zwobble.couscous.ast.visitors.NodeTransformer;
import org.zwobble.couscous.values.*;
-import java.util.function.Function;
-
import static org.zwobble.couscous.values.PrimitiveValues.value;
public class LiteralNode implements ExpressionNode {
@@ -55,10 +53,6 @@ public class LiteralNode implements ExpressionNode {
}
@Override
- public ExpressionNode replaceExpressions(Function<ExpressionNode, ExpressionNode> replace) {
- return this;
- }
-
public ExpressionNode transform(NodeTransformer transformer) {
return new LiteralNode(transformValue(transformer), transformer.transform(type));
}
diff --git a/src/main/java/org/zwobble/couscous/ast/MethodCallNode.java b/src/main/java/org/zwobble/couscous/ast/MethodCallNode.java
index 5a67bc2..b622d24 100644
--- a/src/main/java/org/zwobble/couscous/ast/MethodCallNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/MethodCallNode.java
@@ -4,7 +4,6 @@ import org.zwobble.couscous.ast.visitors.ExpressionNodeMapper;
import org.zwobble.couscous.ast.visitors.NodeTransformer;
import java.util.List;
-import java.util.function.Function;
import static org.zwobble.couscous.ast.InstanceReceiver.instanceReceiver;
import static org.zwobble.couscous.ast.StaticReceiver.staticReceiver;
@@ -88,14 +87,6 @@ public class MethodCallNode implements ExpressionNode {
}
@Override
- public ExpressionNode replaceExpressions(Function<ExpressionNode, ExpressionNode> replace) {
- return new MethodCallNode(
- receiver.replaceExpressions(replace),
- methodName,
- eagerMap(arguments, replace::apply),
- type);
- }
-
public ExpressionNode transform(NodeTransformer transformer) {
return new MethodCallNode(
transformer.visit(receiver),
diff --git a/src/main/java/org/zwobble/couscous/ast/TernaryConditionalNode.java b/src/main/java/org/zwobble/couscous/ast/TernaryConditionalNode.java
index c49bbc5..6364e94 100644
--- a/src/main/java/org/zwobble/couscous/ast/TernaryConditionalNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/TernaryConditionalNode.java
@@ -3,8 +3,6 @@ package org.zwobble.couscous.ast;
import org.zwobble.couscous.ast.visitors.ExpressionNodeMapper;
import org.zwobble.couscous.ast.visitors.NodeTransformer;
-import java.util.function.Function;
-
public class TernaryConditionalNode implements ExpressionNode {
public static TernaryConditionalNode ternaryConditional(
ExpressionNode condition,
@@ -44,13 +42,6 @@ public class TernaryConditionalNode implements ExpressionNode {
}
@Override
- public ExpressionNode replaceExpressions(Function<ExpressionNode, ExpressionNode> replace) {
- return new TernaryConditionalNode(
- replace.apply(condition),
- replace.apply(ifTrue),
- replace.apply(ifFalse));
- }
-
public ExpressionNode transform(NodeTransformer transformer) {
return new TernaryConditionalNode(
transformer.visit(condition),
diff --git a/src/main/java/org/zwobble/couscous/ast/ThisReferenceNode.java b/src/main/java/org/zwobble/couscous/ast/ThisReferenceNode.java
index 6056abd..ebc2d8d 100644
--- a/src/main/java/org/zwobble/couscous/ast/ThisReferenceNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/ThisReferenceNode.java
@@ -3,8 +3,6 @@ package org.zwobble.couscous.ast;
import org.zwobble.couscous.ast.visitors.ExpressionNodeMapper;
import org.zwobble.couscous.ast.visitors.NodeTransformer;
-import java.util.function.Function;
-
public class ThisReferenceNode implements ExpressionNode, ReferenceNode {
public static ThisReferenceNode thisReference(TypeName type) {
return new ThisReferenceNode(type);
@@ -26,15 +24,11 @@ public class ThisReferenceNode implements ExpressionNode, ReferenceNode {
}
@Override
- public ExpressionNode replaceExpressions(Function<ExpressionNode, ExpressionNode> replace) {
- return this;
- }
-
- @Override
public <T> T accept(Visitor<T> visitor) {
return visitor.visit(this);
}
+ @Override
public ExpressionNode transform(NodeTransformer transformer) {
return new ThisReferenceNode(transformer.transform(type));
}
diff --git a/src/main/java/org/zwobble/couscous/ast/TypeCoercionNode.java b/src/main/java/org/zwobble/couscous/ast/TypeCoercionNode.java
index 04ba7d1..db58deb 100644
--- a/src/main/java/org/zwobble/couscous/ast/TypeCoercionNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/TypeCoercionNode.java
@@ -3,8 +3,6 @@ package org.zwobble.couscous.ast;
import org.zwobble.couscous.ast.visitors.ExpressionNodeMapper;
import org.zwobble.couscous.ast.visitors.NodeTransformer;
-import java.util.function.Function;
-
public class TypeCoercionNode implements ExpressionNode {
public static TypeCoercionNode typeCoercion(ExpressionNode expression, TypeName type) {
return new TypeCoercionNode(expression, type);
@@ -33,10 +31,6 @@ public class TypeCoercionNode implements ExpressionNode {
}
@Override
- public ExpressionNode replaceExpressions(Function<ExpressionNode, ExpressionNode> replace) {
- return new TypeCoercionNode(replace.apply(expression), type);
- }
-
public ExpressionNode transform(NodeTransformer transformer) {
return new TypeCoercionNode(
transformer.visit(expression),
diff --git a/src/main/java/org/zwobble/couscous/ast/VariableReferenceNode.java b/src/main/java/org/zwobble/couscous/ast/VariableReferenceNode.java
index b907c6d..f9800a5 100644
--- a/src/main/java/org/zwobble/couscous/ast/VariableReferenceNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/VariableReferenceNode.java
@@ -5,8 +5,6 @@ import org.zwobble.couscous.ast.visitors.AssignableExpressionNodeVisitor;
import org.zwobble.couscous.ast.visitors.ExpressionNodeMapper;
import org.zwobble.couscous.ast.visitors.NodeTransformer;
-import java.util.function.Function;
-
public class VariableReferenceNode implements AssignableExpressionNode, ReferenceNode {
public static VariableReferenceNode reference(VariableNode variable) {
return new VariableReferenceNode(variable.getDeclaration());
@@ -31,11 +29,6 @@ public class VariableReferenceNode implements AssignableExpressionNode, Referenc
return visitor.visit(this);
}
- @Override
- public ExpressionNode replaceExpressions(Function<ExpressionNode, ExpressionNode> replace) {
- return this;
- }
-
public Identifier getReferentId() {
return referent.getId();
}
@@ -55,6 +48,7 @@ public class VariableReferenceNode implements AssignableExpressionNode, Referenc
return visitor.visit(this);
}
+ @Override
public ExpressionNode transform(NodeTransformer transformer) {
return new VariableReferenceNode(transformer.transform(referent));
}
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 539acd0..2b68afc 100644
--- a/src/main/java/org/zwobble/couscous/ast/visitors/NodeTransformer.java
+++ b/src/main/java/org/zwobble/couscous/ast/visitors/NodeTransformer.java
@@ -11,6 +11,8 @@ import java.util.Set;
public class NodeTransformer implements ExpressionNodeMapper<ExpressionNode>, StatementNodeMapper<StatementNode>, NodeMapper<Node> {
// TODO: tidy up transform vs visit
+ // TODO: don't expose specific statement/expression visit methods
+ // (require passing through visit(ExpressionNode) and visit(StatementNode) for callers
public TypeName transform(TypeName type) {
return type;
}