You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "Will McQueen (JIRA)" <ji...@apache.org> on 2015/10/07 02:25:26 UTC

[jira] [Created] (GROOVY-7617) Label is leaking scope when applied to a statement other than a block statement

Will McQueen created GROOVY-7617:
------------------------------------

             Summary: Label is leaking scope when applied to a statement other than a block statement
                 Key: GROOVY-7617
                 URL: https://issues.apache.org/jira/browse/GROOVY-7617
             Project: Groovy
          Issue Type: Bug
          Components: Compiler
    Affects Versions: 2.4.5
         Environment: Mac OS X 10.10.5
            Reporter: Will McQueen


In Groovy, the scope of a labelled statement seems to be leaking to other labelled statements that use the same label. This issue is reproducible only when the labelled statement is not a block (eg, when it's not something like.... *mylabel:\{...\}* ).

Groovy code is shown below. The issue here is that this compiles and causes infinite output because the 2nd reference of mylabel seems to be referencing the first labelled statement instead of its own (ie, instead of the 2nd labelled statement).
{code}
mylabel: for (x in [1,2]) {
  println "first"
  break mylabel
}

for (x in [3,4]) {
  println "second"
  break mylabel  //2nd reference of mylabel
}
{code}
{panel}
Output:
first
second
second
second
second
second
...
{panel}

Java code is shown below. As expected, this won't compile because the 2nd reference to 'mylabel' is out of scope:
{code}
mylabel: for (int x : Arrays.asList(1,2)) {
  System.out.println("first");
  break mylabel;
}

for (int x : Arrays.asList(3,4)) {
	System.out.println("second");
	break mylabel;  //won't compile: "Undefined label: 'mylabel'"
}
{code}



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