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

Jochen Theodorou commented on GROOVY-7617:
------------------------------------------

The problem is that I remember the semantics for "continue" much more than for 
break. I tend to say, that in the example continue should have been used 
instead. Maybe the implementation uses the same semantics for both in this 
case. But I tend to say, that this should fail at compile time.

> 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 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
(v6.3.4#6332)

Reply via email to