On 08/05/18 23:37, Dan Smith wrote:
I think what prompted this degree of brittleness is worries about ambiguity 
between label breaks and value breaks. Let me suggest this disambiguation 
strategy instead (in the spirit of 6.5.2):
- If an unqualified name appears immediately after a 'break' and occurs in the 
scope of a label with that name, it is a LabelName
- Otherwise, it is an ExpressionName
I might be wrong, but I think the brittleness is only tangentially related to disambiguation of label vs. value. I believe what we also wanted to avoid was for a 'break expression' to appear nested inside another break-y context - e.g. another statement switch - example:

boolean v = switch (e1) {
    case "One":
           switch (e2) {
                  case 42: break false; // <-----
           }
           break true;
    ...
}

The fact that we can 'break false' from a switch (statement) nested inside a switch (expression) is visually very confusing - and I've seen code snippets (one of javac regression tests) where it was virtually impossible to determine whether a switch was an expression or a statement because of this fact.

So, maybe the brittleness can be tweaked, but I'd be wary of completely remove it.

Maurizio

Reply via email to