You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "Paul King (Jira)" <ji...@apache.org> on 2023/02/10 21:41:00 UTC

[jira] [Closed] (GROOVY-8487) @CompileStatic calls DefaultGroovyMethods.iterator with Iterator value in for loop

     [ https://issues.apache.org/jira/browse/GROOVY-8487?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Paul King closed GROOVY-8487.
-----------------------------

> @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: Bug
>          Components: bytecode, Static compilation
>    Affects Versions: 2.4.12
>            Reporter: death lord
>            Assignee: Eric Milles
>            Priority: Major
>             Fix For: 4.0.5
>
>
> {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
(v8.20.10#820010)