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