aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/couscous/frontends
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-07-31 19:13:45 +0100
committerMichael Williamson <mike@zwobble.org>2016-07-31 19:13:45 +0100
commit4189eb24789bd5d1d9ef4ecea567f4119cbb325c (patch)
treee6e3812215edcfb68225df2eb715b38c8705ee91 /src/main/java/org/zwobble/couscous/frontends
parent157aa4fbc6447900c33f668ccaf6de46632e6b5c (diff)
Implement for loops using desugar
Diffstat (limited to 'src/main/java/org/zwobble/couscous/frontends')
-rw-r--r--src/main/java/org/zwobble/couscous/frontends/java/JavaStatementReader.java17
1 files changed, 7 insertions, 10 deletions
diff --git a/src/main/java/org/zwobble/couscous/frontends/java/JavaStatementReader.java b/src/main/java/org/zwobble/couscous/frontends/java/JavaStatementReader.java
index 72f94d5..6e9444c 100644
--- a/src/main/java/org/zwobble/couscous/frontends/java/JavaStatementReader.java
+++ b/src/main/java/org/zwobble/couscous/frontends/java/JavaStatementReader.java
@@ -20,6 +20,7 @@ import static org.zwobble.couscous.ast.VariableReferenceNode.reference;
import static org.zwobble.couscous.ast.WhileNode.whileLoop;
import static org.zwobble.couscous.ast.sugar.SwitchCaseNode.switchCase;
import static org.zwobble.couscous.frontends.java.JavaTypes.typeOf;
+import static org.zwobble.couscous.util.ExtraIterables.only;
import static org.zwobble.couscous.util.ExtraIterables.takeUntil;
import static org.zwobble.couscous.util.ExtraLists.*;
import static org.zwobble.couscous.util.Tails.tail;
@@ -180,19 +181,15 @@ class JavaStatementReader {
private List<StatementNode> readForStatement(ForStatement statement) {
@SuppressWarnings("unchecked")
List<VariableDeclarationExpression> javaInitialisers = statement.initializers();
- if (javaInitialisers.size() != 1) {
- throw new UnsupportedOperationException();
- }
@SuppressWarnings("unchecked")
List<Expression> updaters = statement.updaters();
- return append(
- readVariableDeclarationExpression(javaInitialisers.get(0)),
- whileLoop(
- readExpression(Types.BOOLEAN, statement.getExpression()),
- concat(
- readBody(statement.getBody()),
- eagerMap(updaters, updater -> expressionStatement(readExpressionWithoutBoxing(updater))))));
+ return list(new ForNode(
+ readVariableDeclarationExpression(only(javaInitialisers)),
+ readExpression(Types.BOOLEAN, statement.getExpression()),
+ eagerMap(updaters, this::readExpressionWithoutBoxing),
+ readBody(statement.getBody())
+ ));
}
private List<StatementNode> readEnhancedForStatement(EnhancedForStatement statement) {