[ 
https://issues.apache.org/jira/browse/GROOVY-7617?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Eric Milles updated GROOVY-7617:
--------------------------------
    Language: groovy

> 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
>            Assignee: Eric Milles
>            Priority: Major
>
> In Groovy, the scope of a labelled statement seems to be leaking so that 
> break statements occurring outside the labelled statement are still valid and 
> in scope for that label. This issue is reproducible only when the labelled 
> statement is not a block (eg, when it's not something like.... 
> *mylabel:\{...\}* ).
> For example...
> Groovy code is shown below. The issue here is that this code compiles and 
> causes infinite output because the 2nd reference of mylabel is in scope when 
> it shouldn't be.
> {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
(v8.20.10#820010)

Reply via email to