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

Eric Milles commented on GROOVY-7473:
-------------------------------------

{{BinaryExpressionTransformer#convertInOperatorToTernary}} changes "o.p in 
['x','y','z']" to "['x','y','z'] == null ? o.p == null : 
['x','y','z'].isCase(o.p)". This could be made simpler for the times where 
right expression cannot be null.  And if {{isCase}} is overridden for 
{{{}NullObject{}}}, it could be "['x','y','z']?.isCase(o.p)" instead of a 
ternary.

> 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
>            Priority: Major
>              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
(v8.20.1#820001)

Reply via email to