aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/couscous/ast/visitors
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2015-10-05 22:26:29 +0100
committerMichael Williamson <mike@zwobble.org>2015-10-05 22:26:29 +0100
commit166a205aeb4c595b40b8ffe4c7d745b13031e3b3 (patch)
treeaa493482f4ca312c1f23913ebc2f57b71d8aa590 /src/main/java/org/zwobble/couscous/ast/visitors
parent44e4b877baea47c0465e1029bdbedc848381999f (diff)
Add support for static method calls to Python backend
Diffstat (limited to 'src/main/java/org/zwobble/couscous/ast/visitors')
-rw-r--r--src/main/java/org/zwobble/couscous/ast/visitors/ExpressionNodeMapper.java (renamed from src/main/java/org/zwobble/couscous/ast/visitors/ExpressionNodeVisitor.java)2
-rw-r--r--src/main/java/org/zwobble/couscous/ast/visitors/NodeVisitor.java29
-rw-r--r--src/main/java/org/zwobble/couscous/ast/visitors/NodeVisitorWithEmptyDefaults.java59
-rw-r--r--src/main/java/org/zwobble/couscous/ast/visitors/NodeVisitors.java97
-rw-r--r--src/main/java/org/zwobble/couscous/ast/visitors/StatementNodeMapper.java (renamed from src/main/java/org/zwobble/couscous/ast/visitors/StatementNodeVisitor.java)2
5 files changed, 187 insertions, 2 deletions
diff --git a/src/main/java/org/zwobble/couscous/ast/visitors/ExpressionNodeVisitor.java b/src/main/java/org/zwobble/couscous/ast/visitors/ExpressionNodeMapper.java
index c47b942..2be2894 100644
--- a/src/main/java/org/zwobble/couscous/ast/visitors/ExpressionNodeVisitor.java
+++ b/src/main/java/org/zwobble/couscous/ast/visitors/ExpressionNodeMapper.java
@@ -7,7 +7,7 @@ import org.zwobble.couscous.ast.StaticMethodCallNode;
import org.zwobble.couscous.ast.TernaryConditionalNode;
import org.zwobble.couscous.ast.VariableReferenceNode;
-public interface ExpressionNodeVisitor<T> {
+public interface ExpressionNodeMapper<T> {
T visit(LiteralNode literal);
T visit(VariableReferenceNode variableReference);
T visit(AssignmentNode assignment);
diff --git a/src/main/java/org/zwobble/couscous/ast/visitors/NodeVisitor.java b/src/main/java/org/zwobble/couscous/ast/visitors/NodeVisitor.java
new file mode 100644
index 0000000..014b48e
--- /dev/null
+++ b/src/main/java/org/zwobble/couscous/ast/visitors/NodeVisitor.java
@@ -0,0 +1,29 @@
+package org.zwobble.couscous.ast.visitors;
+
+import org.zwobble.couscous.ast.AssignmentNode;
+import org.zwobble.couscous.ast.ClassNode;
+import org.zwobble.couscous.ast.ExpressionStatementNode;
+import org.zwobble.couscous.ast.LiteralNode;
+import org.zwobble.couscous.ast.LocalVariableDeclarationNode;
+import org.zwobble.couscous.ast.MethodCallNode;
+import org.zwobble.couscous.ast.MethodNode;
+import org.zwobble.couscous.ast.ReturnNode;
+import org.zwobble.couscous.ast.StaticMethodCallNode;
+import org.zwobble.couscous.ast.TernaryConditionalNode;
+import org.zwobble.couscous.ast.VariableReferenceNode;
+
+public interface NodeVisitor {
+ void visit(LiteralNode literal);
+ void visit(VariableReferenceNode variableReference);
+ void visit(AssignmentNode assignment);
+ void visit(TernaryConditionalNode ternaryConditional);
+ void visit(MethodCallNode methodCall);
+ void visit(StaticMethodCallNode staticMethodCall);
+
+ void visit(ReturnNode returnNode);
+ void visit(ExpressionStatementNode expressionStatement);
+ void visit(LocalVariableDeclarationNode localVariableDeclaration);
+
+ void visit(ClassNode classNode);
+ void visit(MethodNode methodNode);
+}
diff --git a/src/main/java/org/zwobble/couscous/ast/visitors/NodeVisitorWithEmptyDefaults.java b/src/main/java/org/zwobble/couscous/ast/visitors/NodeVisitorWithEmptyDefaults.java
new file mode 100644
index 0000000..3a58614
--- /dev/null
+++ b/src/main/java/org/zwobble/couscous/ast/visitors/NodeVisitorWithEmptyDefaults.java
@@ -0,0 +1,59 @@
+package org.zwobble.couscous.ast.visitors;
+
+import org.zwobble.couscous.ast.AssignmentNode;
+import org.zwobble.couscous.ast.ClassNode;
+import org.zwobble.couscous.ast.ExpressionStatementNode;
+import org.zwobble.couscous.ast.LiteralNode;
+import org.zwobble.couscous.ast.LocalVariableDeclarationNode;
+import org.zwobble.couscous.ast.MethodCallNode;
+import org.zwobble.couscous.ast.MethodNode;
+import org.zwobble.couscous.ast.ReturnNode;
+import org.zwobble.couscous.ast.StaticMethodCallNode;
+import org.zwobble.couscous.ast.TernaryConditionalNode;
+import org.zwobble.couscous.ast.VariableReferenceNode;
+
+public interface NodeVisitorWithEmptyDefaults extends NodeVisitor {
+ @Override
+ default void visit(LiteralNode literal) {
+ }
+
+ @Override
+ default void visit(VariableReferenceNode variableReference) {
+ }
+
+ @Override
+ default void visit(AssignmentNode assignment) {
+ }
+
+ @Override
+ default void visit(TernaryConditionalNode ternaryConditional) {
+ }
+
+ @Override
+ default void visit(MethodCallNode methodCall) {
+ }
+
+ @Override
+ default void visit(StaticMethodCallNode staticMethodCall) {
+ }
+
+ @Override
+ default void visit(ReturnNode returnNode) {
+ }
+
+ @Override
+ default void visit(ExpressionStatementNode expressionStatement) {
+ }
+
+ @Override
+ default void visit(LocalVariableDeclarationNode localVariableDeclaration) {
+ }
+
+ @Override
+ default void visit(ClassNode classNode) {
+ }
+
+ @Override
+ default void visit(MethodNode methodNode) {
+ }
+}
diff --git a/src/main/java/org/zwobble/couscous/ast/visitors/NodeVisitors.java b/src/main/java/org/zwobble/couscous/ast/visitors/NodeVisitors.java
new file mode 100644
index 0000000..88c6e10
--- /dev/null
+++ b/src/main/java/org/zwobble/couscous/ast/visitors/NodeVisitors.java
@@ -0,0 +1,97 @@
+package org.zwobble.couscous.ast.visitors;
+
+import org.zwobble.couscous.ast.AssignmentNode;
+import org.zwobble.couscous.ast.ClassNode;
+import org.zwobble.couscous.ast.ExpressionStatementNode;
+import org.zwobble.couscous.ast.LiteralNode;
+import org.zwobble.couscous.ast.LocalVariableDeclarationNode;
+import org.zwobble.couscous.ast.MethodCallNode;
+import org.zwobble.couscous.ast.MethodNode;
+import org.zwobble.couscous.ast.Node;
+import org.zwobble.couscous.ast.ReturnNode;
+import org.zwobble.couscous.ast.StaticMethodCallNode;
+import org.zwobble.couscous.ast.TernaryConditionalNode;
+import org.zwobble.couscous.ast.VariableReferenceNode;
+
+import lombok.val;
+
+public class NodeVisitors {
+ public static void visitAll(Node node, NodeVisitor visitor) {
+ node.accept(new NodeVisitor() {
+ @Override
+ public void visit(LiteralNode literal) {
+ visitor.visit(literal);
+ }
+
+ @Override
+ public void visit(VariableReferenceNode variableReference) {
+ visitor.visit(variableReference);
+ }
+
+ @Override
+ public void visit(AssignmentNode assignment) {
+ visitor.visit(assignment);
+ assignment.getValue().accept(this);
+ visit(assignment.getTarget());
+ }
+
+ @Override
+ public void visit(TernaryConditionalNode ternaryConditional) {
+ visitor.visit(ternaryConditional);
+ ternaryConditional.getCondition().accept(this);
+ ternaryConditional.getIfTrue().accept(this);
+ ternaryConditional.getIfFalse().accept(this);
+ }
+
+ @Override
+ public void visit(MethodCallNode methodCall) {
+ visitor.visit(methodCall);
+ methodCall.getReceiver().accept(this);
+ for (val argument : methodCall.getArguments()) {
+ argument.accept(this);
+ }
+ }
+
+ @Override
+ public void visit(StaticMethodCallNode staticMethodCall) {
+ visitor.visit(staticMethodCall);
+ for (val argument : staticMethodCall.getArguments()) {
+ argument.accept(this);
+ }
+ }
+
+ @Override
+ public void visit(ReturnNode returnNode) {
+ visitor.visit(returnNode);
+ returnNode.getValue().accept(this);
+ }
+
+ @Override
+ public void visit(ExpressionStatementNode expressionStatement) {
+ visitor.visit(expressionStatement);
+ expressionStatement.getExpression().accept(this);
+ }
+
+ @Override
+ public void visit(LocalVariableDeclarationNode localVariableDeclaration) {
+ visitor.visit(localVariableDeclaration);
+ localVariableDeclaration.getInitialValue().accept(this);
+ }
+
+ @Override
+ public void visit(ClassNode classNode) {
+ visitor.visit(classNode);
+ for (val method : classNode.getMethods()) {
+ method.accept(this);
+ }
+ }
+
+ @Override
+ public void visit(MethodNode methodNode) {
+ for (val statement : methodNode.getBody()) {
+ statement.accept(this);
+ }
+ }
+ });
+ }
+}
diff --git a/src/main/java/org/zwobble/couscous/ast/visitors/StatementNodeVisitor.java b/src/main/java/org/zwobble/couscous/ast/visitors/StatementNodeMapper.java
index 620f6f8..4bae481 100644
--- a/src/main/java/org/zwobble/couscous/ast/visitors/StatementNodeVisitor.java
+++ b/src/main/java/org/zwobble/couscous/ast/visitors/StatementNodeMapper.java
@@ -4,7 +4,7 @@ import org.zwobble.couscous.ast.ExpressionStatementNode;
import org.zwobble.couscous.ast.LocalVariableDeclarationNode;
import org.zwobble.couscous.ast.ReturnNode;
-public interface StatementNodeVisitor<T> {
+public interface StatementNodeMapper<T> {
T visit(ReturnNode returnNode);
T visit(ExpressionStatementNode expressionStatement);
T visit(LocalVariableDeclarationNode localVariableDeclaration);