aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/couscous/ast/sugar/SwitchCaseNode.java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-07-15 14:23:47 +0100
committerMichael Williamson <mike@zwobble.org>2016-07-15 14:23:47 +0100
commitbc06840e00425db342bc5a021c0900d9e63b71f0 (patch)
tree0aa45a4ea475804a36a5ee33f9a726656f45bc1f /src/main/java/org/zwobble/couscous/ast/sugar/SwitchCaseNode.java
parent3be68289f34a37ac7f9e1e95fa0d95dfc1bb3836 (diff)
Split switch handling off to desugar step
Diffstat (limited to 'src/main/java/org/zwobble/couscous/ast/sugar/SwitchCaseNode.java')
-rw-r--r--src/main/java/org/zwobble/couscous/ast/sugar/SwitchCaseNode.java36
1 files changed, 35 insertions, 1 deletions
diff --git a/src/main/java/org/zwobble/couscous/ast/sugar/SwitchCaseNode.java b/src/main/java/org/zwobble/couscous/ast/sugar/SwitchCaseNode.java
index 534f244..3aa9bdc 100644
--- a/src/main/java/org/zwobble/couscous/ast/sugar/SwitchCaseNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/sugar/SwitchCaseNode.java
@@ -1,12 +1,25 @@
package org.zwobble.couscous.ast.sugar;
+import com.google.common.collect.Iterables;
import org.zwobble.couscous.ast.ExpressionNode;
+import org.zwobble.couscous.ast.Node;
+import org.zwobble.couscous.ast.NodeTypes;
import org.zwobble.couscous.ast.StatementNode;
+import org.zwobble.couscous.ast.visitors.NodeTransformer;
+import org.zwobble.couscous.util.ExtraIterables;
import java.util.List;
import java.util.Optional;
-public class SwitchCaseNode {
+public class SwitchCaseNode implements Node {
+ public static SwitchCaseNode switchCase(ExpressionNode value, List<StatementNode> statements) {
+ return switchCase(Optional.of(value), statements);
+ }
+
+ public static SwitchCaseNode switchCase(List<StatementNode> statements) {
+ return switchCase(Optional.empty(), statements);
+ }
+
public static SwitchCaseNode switchCase(Optional<ExpressionNode> value, List<StatementNode> statements) {
return new SwitchCaseNode(value, statements);
}
@@ -30,4 +43,25 @@ public class SwitchCaseNode {
public List<StatementNode> getStatements() {
return statements;
}
+
+ @Override
+ public int type() {
+ return NodeTypes.SWITCH_CASE;
+ }
+
+ @Override
+ public Iterable<? extends Node> childNodes() {
+ return Iterables.concat(
+ ExtraIterables.iterable(value),
+ statements
+ );
+ }
+
+ @Override
+ public SwitchCaseNode transform(NodeTransformer transformer) {
+ return new SwitchCaseNode(
+ value.map(transformer::transformExpression),
+ transformer.transformStatements(statements)
+ );
+ }
}