On Mon, Nov 16, 2009 at 9:30 AM, KennyTM~ <kenn...@gmail.com> wrote: > On Nov 17, 09 01:12, Bill Baxter wrote: >> >> On Mon, Nov 16, 2009 at 8:24 AM, Andrei Alexandrescu >> <seewebsiteforem...@erdani.org> wrote: >>> >>> Walter Bright wrote: >>>> >>>> Andrei Alexandrescu wrote: >>>>> >>>>> I was hoping the lesson learned would be to fix switch as was >>>>> suggested. >>>> >>>> I checked, because it wasn't written in the way I usually write things, >>>> and sure enough it wasn't code I wrote :-) >>>> >>>> From the changelog for D 0.129: "Incorporated Ben Hinkle's new >>>> std.format >>>> which can print general arrays." >>>> >>>> http://www.digitalmars.com/d/1.0/changelog1.html#new0129 >>> >>> So people are liable to make the mistake. >>> >>> Andrei >>> >> >> What about when you want to fall through to a multiple label? Or a range >> label? >> >> case 0: >> // do stuff >> goto case ??; >> case 1: .. case 9: >> // do more stuff >> goto case ??; >> case 10,20,30: >> // still more stuff >> >> The obvious answer would seem to be just "pick any one". >> I just bring it up because I haven't seen that ... uh case ... >> mentioned by anyone. >> >> --bb > > Since > > case a: > .. > case b: > > expands to > > case a: > case a+1: > case a+2: > // .... > case b: > > and > > case a,b,c,d: > > expands to > > case a: > case b: > case c: > case d: > > Your speculation is correct. Please note that the "goto case X;" statement > works *now*, so there's no need to guess its behavior.
Seriously? Didn't realize. So valid end-of-case statements would be: break; return; continue; goto *; goto case *; And if you don't have one of those then it's an error? Could this get into difficult-to-verify territory? And therefore be difficult to implement? It looks like the exact same problem as enforcing that all code paths return a value, which is something I think D doesn't currently enforce because it's too hard. So you run into Walter's dislike for errors/warnings that are incorrect because the compiler is too stupid. --bb