[ 
https://issues.apache.org/jira/browse/GROOVY-7473?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14595544#comment-14595544
 ] 

Jochen Theodorou commented on GROOVY-7473:
------------------------------------------

I was about to rant about the disassembler you used and that it does translate 
to very strange Java, but then I had the idea, that your code is maybe meant to 
be static compiled. And there it shows indeed the double creation of the list. 
Normal Groovy creates the list only once. 

As for putting the list in a static field... I could ask why for example Java 
doesn't do that for arrays. I am not sure it is always legal to do so.


> ineffient code generation
> -------------------------
>
>                 Key: GROOVY-7473
>                 URL: https://issues.apache.org/jira/browse/GROOVY-7473
>             Project: Groovy
>          Issue Type: Bug
>          Components: Static compilation
>    Affects Versions: 2.4.3
>            Reporter: Laurenz Tontsch
>              Labels: performance
>
> Groovy 2.4.3 generates not the most effient byte code of a simple statement 
> like "in".
> e.g. The following statement:
> If object.stringProperty in ["State1", "State2", "State3"
> gets complied in:
> if 
> (DefaultTypeTransformation.booleanUnbox((ScriptBytecodeAdapter.createList(new 
> Object[] { "State1", "State2", "State3" }) == null ? 1 : 0) != 0 ? 
> Boolean.valueOf(object.getStringProperty() == null) : 
> Boolean.valueOf(DefaultGroovyMethods.isCase(ScriptBytecodeAdapter.createList(new
>  Object[] { "State1", "State2 ", "State3" }), object. getStringProperty ()))))
> instead of this a more effient construct would be the usage of an static list
> e.g.
> static List<String> l1;
> static {
>         l1 = new LinkedList<String>();
>         l1.add("State1");
>         l1.add("State2");
>         l1.add("State3");
> }
> if (DefaultTypeTransformation.booleanUnbox((l1 == null ? 1 : 0) != 0 ? 
> Boolean.valueOf(object.getStringProperty() == null) : 
> Boolean.valueOf(DefaultGroovyMethods.isCase(l1, object. getStringProperty 
> ()))))



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to