Switch case falltrhough, regression or intended behavior ?

Stewart Gordon smjg_1998 at yahoo.com
Sun Feb 17 09:26:01 PST 2013


On 17/02/2013 16:10, deadalnix wrote:
> I have several instance of cases like this :
>
> switch(c) {
>      case 'U', 'u' :
>      case 'L', 'l' :
>          // code . . .
> }
>
> dmd from master complains about it (Error: switch case fallthrough - use 'goto case;' if
> intended). It used to work.
<snip>

Implicit fall through shouldn't have been allowed from the beginning.  It would appear 
that this has finally been banned.

However, according to the grammar, this is now illegal for a different reason:

http://dlang.org/statement.html#SwitchStatement

CaseStatement:
     case ArgumentList : ScopeStatementList

ScopeStatementList:
     StatementListNoCaseNoDefault

StatementListNoCaseNoDefault:
     StatementNoCaseNoDefault
     StatementNoCaseNoDefault StatementListNoCaseNoDefault

But it does seem odd to people coming from C(++), since it doesn't seem aimed at either 
simplifying the grammar or shielding the programmer's foot against self-inflicted gunfire.

But it does address this issue, which I actually hadn't taken in had been resolved
http://d.puremagic.com/issues/show_bug.cgi?id=603

If we want to still allow the old C syntax for multiple cases, then we can define

CaseStatement:
     case ArgumentList : ScopeStatementList
     case ArgumentList : CaseStatement

which is only a small change....

Stewart.


More information about the Digitalmars-d mailing list