diff options
| author | Michael Williamson <mike@zwobble.org> | 2016-07-31 18:06:33 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2016-07-31 18:06:33 +0100 |
| commit | 1b0bd2dd2eac9883d81d9e2ccb0eecdb50add59c (patch) | |
| tree | 07aa3ae827d79991f0fc62193d584fec399a651a /src/main/java/org/zwobble/couscous/frontends | |
| parent | 879f53add0eb030ba6eee502d11b919d9ae25997 (diff) | |
Read for-each as sugared statements
Diffstat (limited to 'src/main/java/org/zwobble/couscous/frontends')
| -rw-r--r-- | src/main/java/org/zwobble/couscous/frontends/java/JavaStatementReader.java | 16 |
1 files changed, 6 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 5692f8a..df75ec4 100644 --- a/src/main/java/org/zwobble/couscous/frontends/java/JavaStatementReader.java +++ b/src/main/java/org/zwobble/couscous/frontends/java/JavaStatementReader.java @@ -21,7 +21,6 @@ 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.types.BoundTypeParameter.boundTypeParameter; import static org.zwobble.couscous.util.ExtraIterables.takeUntil; import static org.zwobble.couscous.util.ExtraLists.*; import static org.zwobble.couscous.util.Tails.tail; @@ -203,17 +202,14 @@ class JavaStatementReader { Type elementType = typeOf(parameter.getType()); ExpressionNode iterableValue = readExpression(JavaTypes.iterable(elementType), statement.getExpression()); - ExpressionNode iteratorValue = methodCall(iterableValue, "iterator", list(), JavaTypes.iterator(elementType)); - LocalVariableDeclarationNode iterator = scope.temporaryVariable(iteratorValue); - - ExpressionNode hasNext = methodCall(reference(iterator), "hasNext", list(), Types.BOOLEAN); - ExpressionNode next = methodCall(reference(iterator), "next", list(), boundTypeParameter(JavaTypes.ITERATOR_TYPE_PARAMETER, elementType)); IVariableBinding parameterBinding = parameter.resolveBinding(); - WhileNode loop = whileLoop(hasNext, cons( - scope.localVariable(parameterBinding.getKey(), parameterBinding.getName(), elementType, next), - readStatement(statement.getBody()))); - return list(iterator, loop); + ForEachNode node = new ForEachNode( + scope.generateVariable(parameterBinding.getKey(), parameterBinding.getName(), elementType), + iterableValue, + readStatement(statement.getBody()) + ); + return list(node); } private List<StatementNode> readVariableDeclarationStatement(VariableDeclarationStatement statement) { |
