[
https://issues.apache.org/jira/browse/GROOVY-11843?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Eric Milles updated GROOVY-11843:
---------------------------------
Description:
Consider the following:
{code:groovy}
@CompileStatic test() {
new Pogo(a:1, b:2, c:3)
}
{code}
When "a", "b" and "c" map to "setA(int)", "setB(int)" and "setC(int)"
respectively there are spurious {{ACONST_NULL}} and {{POP}} instructions
generated after each setter invocation.
{code}
run()Ljava/lang/Object;
00000 LTestScripttestMapConstructorOptimization4; . . . . : : NEW C
00001 LTestScripttestMapConstructorOptimization4; . . . . : LC; : DUP
00002 LTestScripttestMapConstructorOptimization4; . . . . : LC; LC; :
INVOKESPECIAL C.<init> ()V
00003 LTestScripttestMapConstructorOptimization4; . . . . : LC; : ASTORE 1
00004 LTestScripttestMapConstructorOptimization4; LC; . . . : : ICONST_1
00005 LTestScripttestMapConstructorOptimization4; LC; . . . : I : DUP
00006 LTestScripttestMapConstructorOptimization4; LC; . . . : I I :
ISTORE 2
00007 LTestScripttestMapConstructorOptimization4; LC; I . . : I : ALOAD 1
00008 LTestScripttestMapConstructorOptimization4; LC; I . . : I LC; :
ILOAD 2
00009 LTestScripttestMapConstructorOptimization4; LC; I . . : I LC; I :
INVOKEVIRTUAL C.setI (I)V
00010 LTestScripttestMapConstructorOptimization4; LC; I . . : I : POP
00011 LTestScripttestMapConstructorOptimization4; LC; I . . : : ICONST_2
00012 LTestScripttestMapConstructorOptimization4; LC; I . . : I : DUP
00013 LTestScripttestMapConstructorOptimization4; LC; I . . : I I :
ISTORE 3
00014 LTestScripttestMapConstructorOptimization4; LC; I I . : I : ALOAD 1
00015 LTestScripttestMapConstructorOptimization4; LC; I I . : I LC; :
ILOAD 3
00016 LTestScripttestMapConstructorOptimization4; LC; I I . : I LC; I :
INVOKEVIRTUAL C.setJ (I)V
00017 LTestScripttestMapConstructorOptimization4; LC; I I . : I : POP
00018 LTestScripttestMapConstructorOptimization4; LC; I I . : : ICONST_3
00019 LTestScripttestMapConstructorOptimization4; LC; I I . : I : DUP
00020 LTestScripttestMapConstructorOptimization4; LC; I I . : I I :
ISTORE 4
00021 LTestScripttestMapConstructorOptimization4; LC; I I I : I : ALOAD 1
00022 LTestScripttestMapConstructorOptimization4; LC; I I I : I LC; :
ILOAD 4
00023 LTestScripttestMapConstructorOptimization4; LC; I I I : I LC; I :
INVOKEVIRTUAL C.setK (I)V
00024 LTestScripttestMapConstructorOptimization4; LC; I I I : I : POP
00025 LTestScripttestMapConstructorOptimization4; LC; I I I : : ALOAD 1
00026 LTestScripttestMapConstructorOptimization4; LC; I I I : LC; :
ARETURN
{code}
was:
Consider the following:
{code:groovy}
@CompileStatic test() {
new Pogo(a:1, b:2, c:3)
}
{code}
When "a", "b" and "c" map to "setA(int)", "setB(int)" and "setC(int)"
respectively there are spurious {{ACONST_NULL}} and {{POP}} instructions
generated after each setter invocation.
> SC: map-style constructor call optimization
> -------------------------------------------
>
> Key: GROOVY-11843
> URL: https://issues.apache.org/jira/browse/GROOVY-11843
> Project: Groovy
> Issue Type: Bug
> Components: class generator, Static compilation
> Reporter: Eric Milles
> Assignee: Eric Milles
> Priority: Major
>
> Consider the following:
> {code:groovy}
> @CompileStatic test() {
> new Pogo(a:1, b:2, c:3)
> }
> {code}
> When "a", "b" and "c" map to "setA(int)", "setB(int)" and "setC(int)"
> respectively there are spurious {{ACONST_NULL}} and {{POP}} instructions
> generated after each setter invocation.
> {code}
> run()Ljava/lang/Object;
> 00000 LTestScripttestMapConstructorOptimization4; . . . . : : NEW C
> 00001 LTestScripttestMapConstructorOptimization4; . . . . : LC; : DUP
> 00002 LTestScripttestMapConstructorOptimization4; . . . . : LC; LC; :
> INVOKESPECIAL C.<init> ()V
> 00003 LTestScripttestMapConstructorOptimization4; . . . . : LC; :
> ASTORE 1
> 00004 LTestScripttestMapConstructorOptimization4; LC; . . . : : ICONST_1
> 00005 LTestScripttestMapConstructorOptimization4; LC; . . . : I : DUP
> 00006 LTestScripttestMapConstructorOptimization4; LC; . . . : I I :
> ISTORE 2
> 00007 LTestScripttestMapConstructorOptimization4; LC; I . . : I : ALOAD
> 1
> 00008 LTestScripttestMapConstructorOptimization4; LC; I . . : I LC; :
> ILOAD 2
> 00009 LTestScripttestMapConstructorOptimization4; LC; I . . : I LC; I :
> INVOKEVIRTUAL C.setI (I)V
> 00010 LTestScripttestMapConstructorOptimization4; LC; I . . : I : POP
> 00011 LTestScripttestMapConstructorOptimization4; LC; I . . : : ICONST_2
> 00012 LTestScripttestMapConstructorOptimization4; LC; I . . : I : DUP
> 00013 LTestScripttestMapConstructorOptimization4; LC; I . . : I I :
> ISTORE 3
> 00014 LTestScripttestMapConstructorOptimization4; LC; I I . : I : ALOAD
> 1
> 00015 LTestScripttestMapConstructorOptimization4; LC; I I . : I LC; :
> ILOAD 3
> 00016 LTestScripttestMapConstructorOptimization4; LC; I I . : I LC; I :
> INVOKEVIRTUAL C.setJ (I)V
> 00017 LTestScripttestMapConstructorOptimization4; LC; I I . : I : POP
> 00018 LTestScripttestMapConstructorOptimization4; LC; I I . : : ICONST_3
> 00019 LTestScripttestMapConstructorOptimization4; LC; I I . : I : DUP
> 00020 LTestScripttestMapConstructorOptimization4; LC; I I . : I I :
> ISTORE 4
> 00021 LTestScripttestMapConstructorOptimization4; LC; I I I : I : ALOAD
> 1
> 00022 LTestScripttestMapConstructorOptimization4; LC; I I I : I LC; :
> ILOAD 4
> 00023 LTestScripttestMapConstructorOptimization4; LC; I I I : I LC; I :
> INVOKEVIRTUAL C.setK (I)V
> 00024 LTestScripttestMapConstructorOptimization4; LC; I I I : I : POP
> 00025 LTestScripttestMapConstructorOptimization4; LC; I I I : : ALOAD 1
> 00026 LTestScripttestMapConstructorOptimization4; LC; I I I : LC; :
> ARETURN
> {code}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)