From 89d7adbf73e6580690e20cbd56e11da6e1409dec Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Thu, 28 Apr 2011 18:24:16 +0200 Subject: [PATCH] generate for/in over java.lang.Iterable --- .../jet/codegen/ExpressionCodegen.java | 68 ++++++++++++++++++- idea/testData/codegen/for.jet | 4 +- .../jet/codegen/ControlStructuresTest.java | 5 +- 3 files changed, 71 insertions(+), 6 deletions(-) diff --git a/idea/src/org/jetbrains/jet/codegen/ExpressionCodegen.java b/idea/src/org/jetbrains/jet/codegen/ExpressionCodegen.java index 344fa1e5a9c..b19daacfe70 100644 --- a/idea/src/org/jetbrains/jet/codegen/ExpressionCodegen.java +++ b/idea/src/org/jetbrains/jet/codegen/ExpressionCodegen.java @@ -1,6 +1,8 @@ package org.jetbrains.jet.codegen; +import com.intellij.openapi.project.Project; import com.intellij.psi.*; +import com.intellij.psi.search.ProjectScope; import com.intellij.psi.tree.IElementType; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.psi.*; @@ -15,6 +17,7 @@ import org.objectweb.asm.Type; import org.objectweb.asm.commons.InstructionAdapter; import org.objectweb.asm.commons.Method; +import java.util.Iterator; import java.util.List; import java.util.Stack; @@ -26,6 +29,14 @@ public class ExpressionCodegen extends JetVisitor { private static final String CLASS_STRING = "java/lang/String"; private static final String CLASS_STRING_BUILDER = "java/lang/StringBuilder"; private static final String CLASS_COMPARABLE = "java/lang/Comparable"; + private static final String CLASS_ITERABLE = "java/lang/Iterable"; + private static final String CLASS_ITERATOR = "java/util/Iterator"; + + private static final String ITERABLE_ITERATOR_DESCRIPTOR = "()Ljava/util/Iterator;"; + private static final String ITERATOR_HASNEXT_DESCRIPTOR = "()Z"; + private static final String ITERATOR_NEXT_DESCRIPTOR = "()Ljava/lang/Object;"; + + private static final Type ITERATOR_TYPE = Type.getType(Iterator.class); private final Stack