diff options
| author | Michael Williamson <mike@zwobble.org> | 2016-07-31 19:13:45 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2016-07-31 19:13:45 +0100 |
| commit | 4189eb24789bd5d1d9ef4ecea567f4119cbb325c (patch) | |
| tree | e6e3812215edcfb68225df2eb715b38c8705ee91 /src/main/java/org/zwobble/couscous/frontends | |
| parent | 157aa4fbc6447900c33f668ccaf6de46632e6b5c (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.java | 17 |
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) { |
