aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/couscous/transforms
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-07-31 19:18:13 +0100
committerMichael Williamson <mike@zwobble.org>2016-07-31 19:19:21 +0100
commit903963a7c2b6345c41568f00de4d4752466f02f0 (patch)
tree67edb73a315858d5ee86f6988128b3c01132ff18 /src/main/java/org/zwobble/couscous/transforms
parent44f8b1ba1342af8d2088dd7c038f0753c7346db4 (diff)
Desugar foreach to for rather than while
Diffstat (limited to 'src/main/java/org/zwobble/couscous/transforms')
-rw-r--r--src/main/java/org/zwobble/couscous/transforms/DesugarForEachToFor.java (renamed from src/main/java/org/zwobble/couscous/transforms/DesugarForEachToWhile.java)20
1 files changed, 12 insertions, 8 deletions
diff --git a/src/main/java/org/zwobble/couscous/transforms/DesugarForEachToWhile.java b/src/main/java/org/zwobble/couscous/transforms/DesugarForEachToFor.java
index 7b6147b..bdae29a 100644
--- a/src/main/java/org/zwobble/couscous/transforms/DesugarForEachToWhile.java
+++ b/src/main/java/org/zwobble/couscous/transforms/DesugarForEachToFor.java
@@ -13,14 +13,13 @@ import java.util.Optional;
import static org.zwobble.couscous.ast.LocalVariableDeclarationNode.localVariableDeclaration;
import static org.zwobble.couscous.ast.MethodCallNode.methodCall;
import static org.zwobble.couscous.ast.VariableReferenceNode.reference;
-import static org.zwobble.couscous.ast.WhileNode.whileLoop;
import static org.zwobble.couscous.types.BoundTypeParameter.boundTypeParameter;
import static org.zwobble.couscous.util.ExtraLists.cons;
import static org.zwobble.couscous.util.ExtraLists.list;
-public class DesugarForEachToWhile {
+public class DesugarForEachToFor {
public static NodeTransformer transformer() {
- Scope scope = Scope.create().temporaryPrefix("_couscous_desugar_foreach_to_while");
+ Scope scope = Scope.create().temporaryPrefix("_couscous_desugar_foreach_to_for");
return NodeTransformer.builder()
.transformStatement(statement -> {
if (statement.type() == NodeTypes.FOR_EACH) {
@@ -39,11 +38,16 @@ public class DesugarForEachToWhile {
ExpressionNode hasNext = methodCall(reference(iterator), "hasNext", list(), Types.BOOLEAN);
ExpressionNode next = methodCall(reference(iterator), "next", list(), boundTypeParameter(JavaTypes.ITERATOR_TYPE_PARAMETER, elementType));
- WhileNode loop = whileLoop(hasNext, cons(
- localVariableDeclaration(forEach.getTarget(), next),
- forEach.getStatements()
- ));
+ ForNode loop = new ForNode(
+ list(iterator),
+ hasNext,
+ list(),
+ cons(
+ localVariableDeclaration(forEach.getTarget(), next),
+ forEach.getStatements()
+ )
+ );
- return list(new StatementBlockNode(list(iterator, loop)));
+ return list(loop);
}
}