death lord created GROOVY-8487:
----------------------------------

             Summary: @CompileStatic calls DefaultGroovyMethods.iterator with 
Iterator value in for loop
                 Key: GROOVY-8487
                 URL: https://issues.apache.org/jira/browse/GROOVY-8487
             Project: Groovy
          Issue Type: Improvement
          Components: bytecode, Static compilation
    Affects Versions: 2.4.12
            Reporter: death lord


{code:java}
@groovy.transform.CompileStatic
class IteratorTest {
  static main(args) {
    final a = [1, 2, 3, 4, 5]
    for (x in a.iterator()) println x
  }
}
{code}
bytecode (important part commented out):
{code:java}
38 aastore
39 invokestatic #39 
<org/codehaus/groovy/runtime/ScriptBytecodeAdapter/createList([Ljava/lang/Object;)Ljava/util/List;>
42 astore_1
43 aload_1
44 pop
45 aconst_null
46 astore_2
47 aload_1
48 invokeinterface #45 <java/util/List/iterator()Ljava/util/Iterator;> count 1
/*53 invokestatic #50 
<org/codehaus/groovy/runtime/DefaultGroovyMethods/iterator(Ljava/lang/Object;)Ljava/util/Iterator;>*/
56 astore_3
57 aload_3
58 invokeinterface #56 <java/util/Iterator/hasNext()Z> count 1
63 ifeq 84 (+21)
66 aload_3
67 invokeinterface #60 <java/util/Iterator/next()Ljava/lang/Object;> count 1
72 astore_2
73 ldc #2 <IteratorTest>
75 aload_2
76 invokestatic #64 
<org/codehaus/groovy/runtime/DefaultGroovyMethods/println(Ljava/lang/Object;Ljava/lang/Object;)V>
79 aconst_null
80 pop
81 goto 57 (-24)
84 return
{code}
(sidenote: aren't 43-46 useless as well?)



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to