blob: 3bd0d326d5106eb5c00b999ed61c70f41550ab09 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
package org.zwobble.couscous.transforms;
import org.zwobble.couscous.ast.ForNode;
import org.zwobble.couscous.ast.NodeTypes;
import org.zwobble.couscous.ast.StatementBlockNode;
import org.zwobble.couscous.ast.StatementNode;
import org.zwobble.couscous.ast.visitors.NodeTransformer;
import java.util.List;
import static org.zwobble.couscous.ast.ExpressionStatementNode.expressionStatement;
import static org.zwobble.couscous.ast.WhileNode.whileLoop;
import static org.zwobble.couscous.util.ExtraIterables.lazyMap;
import static org.zwobble.couscous.util.ExtraLists.*;
public class DesugarForToWhile {
public static NodeTransformer transformer() {
return DesugarStatement.transformer(NodeTypes.FOR, DesugarForToWhile::desugar);
}
public static List<StatementNode> desugar(ForNode forNode) {
List<StatementNode> statements = append(
forNode.getInitializers(),
whileLoop(
forNode.getCondition(),
concat(
forNode.getStatements(),
lazyMap(forNode.getUpdaters(), updater -> expressionStatement(updater))
)
)
);
return list(new StatementBlockNode(statements));
}
}
|