aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/zwobble/couscous/backends/python/PythonBackend.java1
-rw-r--r--src/main/java/org/zwobble/couscous/frontends/java/JavaStatementReader.java3
-rw-r--r--src/main/java/org/zwobble/couscous/frontends/java/JavaTypes.java6
3 files changed, 8 insertions, 2 deletions
diff --git a/src/main/java/org/zwobble/couscous/backends/python/PythonBackend.java b/src/main/java/org/zwobble/couscous/backends/python/PythonBackend.java
index a6c6772..2a3701e 100644
--- a/src/main/java/org/zwobble/couscous/backends/python/PythonBackend.java
+++ b/src/main/java/org/zwobble/couscous/backends/python/PythonBackend.java
@@ -21,6 +21,7 @@ public class PythonBackend implements Backend {
"java.lang.Object",
"java.lang.Integer",
"java.lang.String",
+ "java.util.Arrays",
"_couscous");
private final Path root;
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 6b71684..512030d 100644
--- a/src/main/java/org/zwobble/couscous/frontends/java/JavaStatementReader.java
+++ b/src/main/java/org/zwobble/couscous/frontends/java/JavaStatementReader.java
@@ -23,6 +23,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.types.BoundTypeParameter.boundTypeParameter;
import static org.zwobble.couscous.util.ExtraLists.*;
import static org.zwobble.couscous.util.Fold.foldRight;
import static org.zwobble.couscous.util.Tails.tail;
@@ -234,7 +235,7 @@ class JavaStatementReader {
LocalVariableDeclarationNode iterator = scope.temporaryVariable(iteratorValue);
ExpressionNode hasNext = methodCall(reference(iterator), "hasNext", list(), Types.BOOLEAN);
- ExpressionNode next = methodCall(reference(iterator), "next", list(), elementType);
+ 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),
diff --git a/src/main/java/org/zwobble/couscous/frontends/java/JavaTypes.java b/src/main/java/org/zwobble/couscous/frontends/java/JavaTypes.java
index 9b634b9..37cee36 100644
--- a/src/main/java/org/zwobble/couscous/frontends/java/JavaTypes.java
+++ b/src/main/java/org/zwobble/couscous/frontends/java/JavaTypes.java
@@ -17,6 +17,7 @@ import java.util.Set;
import static com.google.common.collect.Iterables.transform;
import static java.util.Arrays.asList;
import static org.zwobble.couscous.types.ParameterizedType.parameterizedType;
+import static org.zwobble.couscous.types.TypeParameter.typeParameter;
import static org.zwobble.couscous.types.Types.erasure;
import static org.zwobble.couscous.util.Casts.tryCast;
import static org.zwobble.couscous.util.ExtraLists.eagerMap;
@@ -142,7 +143,10 @@ public class JavaTypes {
return parameterizedType(ScalarType.of("java.lang.Iterable"), list(elementType));
}
+ private static final ScalarType RAW_ITERATOR = ScalarType.of("java.util.Iterator");
+ public static TypeParameter ITERATOR_TYPE_PARAMETER = typeParameter(Identifiers.type(Identifiers.TOP, RAW_ITERATOR.getQualifiedName()), "T");
+
public static Type iterator(Type elementType) {
- return parameterizedType(ScalarType.of("java.util.Iterator"), list(elementType));
+ return parameterizedType(RAW_ITERATOR, list(elementType));
}
}