diff options
| author | Michael Williamson <mike@zwobble.org> | 2016-07-31 19:18:13 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2016-07-31 19:19:21 +0100 |
| commit | 903963a7c2b6345c41568f00de4d4752466f02f0 (patch) | |
| tree | 67edb73a315858d5ee86f6988128b3c01132ff18 /src/main/java/org/zwobble/couscous/transforms | |
| parent | 44f8b1ba1342af8d2088dd7c038f0753c7346db4 (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); } } |
