aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/couscous/ast/ForEachNode.java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-07-31 18:06:33 +0100
committerMichael Williamson <mike@zwobble.org>2016-07-31 18:06:33 +0100
commit1b0bd2dd2eac9883d81d9e2ccb0eecdb50add59c (patch)
tree07aa3ae827d79991f0fc62193d584fec399a651a /src/main/java/org/zwobble/couscous/ast/ForEachNode.java
parent879f53add0eb030ba6eee502d11b919d9ae25997 (diff)
Read for-each as sugared statements
Diffstat (limited to 'src/main/java/org/zwobble/couscous/ast/ForEachNode.java')
-rw-r--r--src/main/java/org/zwobble/couscous/ast/ForEachNode.java79
1 files changed, 79 insertions, 0 deletions
diff --git a/src/main/java/org/zwobble/couscous/ast/ForEachNode.java b/src/main/java/org/zwobble/couscous/ast/ForEachNode.java
new file mode 100644
index 0000000..e30f130
--- /dev/null
+++ b/src/main/java/org/zwobble/couscous/ast/ForEachNode.java
@@ -0,0 +1,79 @@
+package org.zwobble.couscous.ast;
+
+import org.zwobble.couscous.ast.visitors.NodeTransformer;
+import org.zwobble.couscous.util.ExtraIterables;
+
+import java.util.List;
+
+public class ForEachNode implements StatementNode {
+ private final VariableDeclaration target;
+ private final ExpressionNode iterable;
+ private final List<StatementNode> statements;
+
+ public ForEachNode(VariableDeclaration target, ExpressionNode iterable, List<StatementNode> statements) {
+ this.target = target;
+ this.iterable = iterable;
+ this.statements = statements;
+ }
+
+ public VariableDeclaration getTarget() {
+ return target;
+ }
+
+ public ExpressionNode getIterable() {
+ return iterable;
+ }
+
+ public List<StatementNode> getStatements() {
+ return statements;
+ }
+
+ @Override
+ public int type() {
+ return NodeTypes.FOR_EACH;
+ }
+
+ @Override
+ public Iterable<? extends Node> childNodes() {
+ return ExtraIterables.of(iterable);
+ }
+
+ @Override
+ public StatementNode transformSubtree(NodeTransformer transformer) {
+ return new ForEachNode(
+ transformer.transform(target),
+ transformer.transformExpression(iterable),
+ transformer.transformStatements(statements)
+ );
+ }
+
+ @Override
+ public String toString() {
+ return "ForEachNode(" +
+ "target=" + target +
+ ", iterable=" + iterable +
+ ", statements=" + statements +
+ ')';
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+
+ ForEachNode that = (ForEachNode) o;
+
+ if (!target.equals(that.target)) return false;
+ if (!iterable.equals(that.iterable)) return false;
+ return statements.equals(that.statements);
+
+ }
+
+ @Override
+ public int hashCode() {
+ int result = target.hashCode();
+ result = 31 * result + iterable.hashCode();
+ result = 31 * result + statements.hashCode();
+ return result;
+ }
+}