You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "Jochen Theodorou (JIRA)" <ji...@apache.org> on 2015/06/22 11:07:00 UTC

[jira] [Commented] (GROOVY-7473) ineffient code generation

    [ 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)