[ 
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  :     
ACONST_NULL
00011 LTestScripttestMapConstructorOptimization4; LC; I . .  : I Lnull;  :     
POP
00012 LTestScripttestMapConstructorOptimization4; LC; I . .  : I  :     POP
00013 LTestScripttestMapConstructorOptimization4; LC; I . .  :  :     ICONST_2
00014 LTestScripttestMapConstructorOptimization4; LC; I . .  : I  :     DUP
00015 LTestScripttestMapConstructorOptimization4; LC; I . .  : I I  :     
ISTORE 3
00016 LTestScripttestMapConstructorOptimization4; LC; I I .  : I  :     ALOAD 1
00017 LTestScripttestMapConstructorOptimization4; LC; I I .  : I LC;  :     
ILOAD 3
00018 LTestScripttestMapConstructorOptimization4; LC; I I .  : I LC; I  :     
INVOKEVIRTUAL C.setJ (I)V
00019 LTestScripttestMapConstructorOptimization4; LC; I I .  : I  :     
ACONST_NULL
00020 LTestScripttestMapConstructorOptimization4; LC; I I .  : I Lnull;  :     
POP
00021 LTestScripttestMapConstructorOptimization4; LC; I I .  : I  :     POP
00022 LTestScripttestMapConstructorOptimization4; LC; I I .  :  :     ICONST_3
00023 LTestScripttestMapConstructorOptimization4; LC; I I .  : I  :     DUP
00024 LTestScripttestMapConstructorOptimization4; LC; I I .  : I I  :     
ISTORE 4
00025 LTestScripttestMapConstructorOptimization4; LC; I I I  : I  :     ALOAD 1
00026 LTestScripttestMapConstructorOptimization4; LC; I I I  : I LC;  :     
ILOAD 4
00027 LTestScripttestMapConstructorOptimization4; LC; I I I  : I LC; I  :     
INVOKEVIRTUAL C.setK (I)V
00028 LTestScripttestMapConstructorOptimization4; LC; I I I  : I  :     
ACONST_NULL
00029 LTestScripttestMapConstructorOptimization4; LC; I I I  : I Lnull;  :     
POP
00030 LTestScripttestMapConstructorOptimization4; LC; I I I  : I  :     POP
00031 LTestScripttestMapConstructorOptimization4; LC; I I I  :  :     ALOAD 1
00032 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.

{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}


> 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  :     
> ACONST_NULL
> 00011 LTestScripttestMapConstructorOptimization4; LC; I . .  : I Lnull;  :    
>  POP
> 00012 LTestScripttestMapConstructorOptimization4; LC; I . .  : I  :     POP
> 00013 LTestScripttestMapConstructorOptimization4; LC; I . .  :  :     ICONST_2
> 00014 LTestScripttestMapConstructorOptimization4; LC; I . .  : I  :     DUP
> 00015 LTestScripttestMapConstructorOptimization4; LC; I . .  : I I  :     
> ISTORE 3
> 00016 LTestScripttestMapConstructorOptimization4; LC; I I .  : I  :     ALOAD 
> 1
> 00017 LTestScripttestMapConstructorOptimization4; LC; I I .  : I LC;  :     
> ILOAD 3
> 00018 LTestScripttestMapConstructorOptimization4; LC; I I .  : I LC; I  :     
> INVOKEVIRTUAL C.setJ (I)V
> 00019 LTestScripttestMapConstructorOptimization4; LC; I I .  : I  :     
> ACONST_NULL
> 00020 LTestScripttestMapConstructorOptimization4; LC; I I .  : I Lnull;  :    
>  POP
> 00021 LTestScripttestMapConstructorOptimization4; LC; I I .  : I  :     POP
> 00022 LTestScripttestMapConstructorOptimization4; LC; I I .  :  :     ICONST_3
> 00023 LTestScripttestMapConstructorOptimization4; LC; I I .  : I  :     DUP
> 00024 LTestScripttestMapConstructorOptimization4; LC; I I .  : I I  :     
> ISTORE 4
> 00025 LTestScripttestMapConstructorOptimization4; LC; I I I  : I  :     ALOAD 
> 1
> 00026 LTestScripttestMapConstructorOptimization4; LC; I I I  : I LC;  :     
> ILOAD 4
> 00027 LTestScripttestMapConstructorOptimization4; LC; I I I  : I LC; I  :     
> INVOKEVIRTUAL C.setK (I)V
> 00028 LTestScripttestMapConstructorOptimization4; LC; I I I  : I  :     
> ACONST_NULL
> 00029 LTestScripttestMapConstructorOptimization4; LC; I I I  : I Lnull;  :    
>  POP
> 00030 LTestScripttestMapConstructorOptimization4; LC; I I I  : I  :     POP
> 00031 LTestScripttestMapConstructorOptimization4; LC; I I I  :  :     ALOAD 1
> 00032 LTestScripttestMapConstructorOptimization4; LC; I I I  : LC;  :     
> ARETURN
> {code}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to