From 4189eb24789bd5d1d9ef4ecea567f4119cbb325c Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sun, 31 Jul 2016 19:13:45 +0100 Subject: Implement for loops using desugar --- .../couscous/frontends/java/JavaStatementReader.java | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) (limited to 'src/main/java/org/zwobble/couscous/frontends') 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 readForStatement(ForStatement statement) { @SuppressWarnings("unchecked") List javaInitialisers = statement.initializers(); - if (javaInitialisers.size() != 1) { - throw new UnsupportedOperationException(); - } @SuppressWarnings("unchecked") List 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 readEnhancedForStatement(EnhancedForStatement statement) { -- cgit v1.2.3