aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/couscous/frontends
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-07-31 18:06:33 +0100
committerMichael Williamson <mike@zwobble.org>2016-07-31 18:06:33 +0100
commit1b0bd2dd2eac9883d81d9e2ccb0eecdb50add59c (patch)
tree07aa3ae827d79991f0fc62193d584fec399a651a /src/main/java/org/zwobble/couscous/frontends
parent879f53add0eb030ba6eee502d11b919d9ae25997 (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.java16
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) {