[ 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)