Oscar N created GROOVY-11630:
--------------------------------
Summary: Extraneous bytecode generated after calls to void DGM
methods
Key: GROOVY-11630
URL: https://issues.apache.org/jira/browse/GROOVY-11630
Project: Groovy
Issue Type: Bug
Components: class generator, Compiler, Static compilation
Affects Versions: 5.0.0-alpha-12
Reporter: Oscar N
I have the following code:
{code:groovy}
import groovy.transform.CompileStatic
@CompileStatic
final class DGMUsage {
static void main(String[] args) {
println "Groovy version: ${GroovySystem.version}"
var list = (1..100).toList()
list.shuffle()
}
}
{code}
When looking at the compiled output, null is pushed to the stack then
immediately popped for DGMs that have a void return type:
{code:java}
// access flags 0x89
public static varargs main([Ljava/lang/String;)V
L0
LINENUMBER 6 L0
LDC LDGMUsage;.class
NEW org/codehaus/groovy/runtime/GStringImpl
DUP
ICONST_1
ANEWARRAY java/lang/Object
DUP
ICONST_0
INVOKESTATIC groovy/lang/GroovySystem.getVersion ()Ljava/lang/String;
AASTORE
ICONST_2
ANEWARRAY java/lang/String
DUP
ICONST_0
LDC "Groovy version: "
AASTORE
DUP
ICONST_1
LDC ""
AASTORE
INVOKESPECIAL org/codehaus/groovy/runtime/GStringImpl.<init>
([Ljava/lang/Object;[Ljava/lang/String;)V
INVOKESTATIC org/codehaus/groovy/runtime/DefaultGroovyMethods.println
(Ljava/lang/Object;Ljava/lang/Object;)V
ACONST_NULL
POP
L1
LINENUMBER 8 L1
NEW groovy/lang/IntRange
DUP
ICONST_1
ICONST_1
ICONST_1
BIPUSH 100
INVOKESPECIAL groovy/lang/IntRange.<init> (ZZII)V
INVOKESTATIC org/codehaus/groovy/runtime/DefaultGroovyMethods.toList
(Ljava/lang/Iterable;)Ljava/util/List;
ASTORE 1
L2
LINENUMBER 9 L2
ALOAD 1
INVOKESTATIC org/codehaus/groovy/runtime/DefaultGroovyMethods.shuffle
(Ljava/util/List;)V
ACONST_NULL
POP
L3
LINENUMBER 10 L3
RETURN
LOCALVARIABLE args [Ljava/lang/String; L0 L3 0
LOCALVARIABLE list Ljava/util/List; L2 L3 1
MAXSTACK = 8
MAXLOCALS = 2
{code}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)