Shil Sinha created GROOVY-7870:
----------------------------------

             Summary: Implicit returns of transformed binary expressions do not 
have line numbers when statically compiled
                 Key: GROOVY-7870
                 URL: https://issues.apache.org/jira/browse/GROOVY-7870
             Project: Groovy
          Issue Type: Bug
          Components: Static compilation
    Affects Versions: 2.4.7
            Reporter: Shil Sinha


If certain transformed binary expressions (<=>, ==, <<,  >>, >>>) are 
implicitly returned, their line numbers are not reported. Example:
{code}
@groovy.transform.CompileStatic
def test() {
    def l = []
    l << 3
}
{code}

The code is compiled to the following bytecode (as seen using GroovyConsole):
{code}
  public test()Ljava/lang/Object;
   L0
    LINENUMBER 3 L0
    ICONST_0
    ANEWARRAY java/lang/Object
    INVOKESTATIC org/codehaus/groovy/runtime/ScriptBytecodeAdapter.createList 
([Ljava/lang/Object;)Ljava/util/List;
    ASTORE 1
   L1
    ALOAD 1
    POP
    ALOAD 1
    ICONST_3
    INVOKESTATIC java/lang/Integer.valueOf (I)Ljava/lang/Integer;
    INVOKESTATIC org/codehaus/groovy/runtime/DefaultGroovyMethods.leftShift 
(Ljava/util/List;Ljava/lang/Object;)Ljava/util/List;
    ARETURN
   L2
    ACONST_NULL
    ARETURN
    LOCALVARIABLE this Lscript1466525199339; L0 L2 0
    LOCALVARIABLE l Ljava/util/List; L1 L2 1
    MAXSTACK = 2
    MAXLOCALS = 2
{code}
There is no line number corresponding to L2, which includes the leftShift call 
(should be line number 4.)



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

Reply via email to