From bc06840e00425db342bc5a021c0900d9e63b71f0 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Fri, 15 Jul 2016 14:23:47 +0100 Subject: Split switch handling off to desugar step --- .../zwobble/couscous/ast/sugar/SwitchCaseNode.java | 36 +++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) (limited to 'src/main/java/org/zwobble/couscous/ast/sugar/SwitchCaseNode.java') 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 statements) { + return switchCase(Optional.of(value), statements); + } + + public static SwitchCaseNode switchCase(List statements) { + return switchCase(Optional.empty(), statements); + } + public static SwitchCaseNode switchCase(Optional value, List statements) { return new SwitchCaseNode(value, statements); } @@ -30,4 +43,25 @@ public class SwitchCaseNode { public List getStatements() { return statements; } + + @Override + public int type() { + return NodeTypes.SWITCH_CASE; + } + + @Override + public Iterable childNodes() { + return Iterables.concat( + ExtraIterables.iterable(value), + statements + ); + } + + @Override + public SwitchCaseNode transform(NodeTransformer transformer) { + return new SwitchCaseNode( + value.map(transformer::transformExpression), + transformer.transformStatements(statements) + ); + } } -- cgit v1.2.3