Laurenz Tontsch created GROOVY-7473:
---------------------------------------

             Summary: ineffient code generation
                 Key: GROOVY-7473
                 URL: https://issues.apache.org/jira/browse/GROOVY-7473
             Project: Groovy
          Issue Type: Bug
          Components: bytecode, class generator
    Affects Versions: 2.4.3
            Reporter: Laurenz Tontsch


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