Implicit case fall-through considered harmful

David-Sarah Hopwood david.hopwood at industrial-designers.co.uk
Mon Oct 27 12:58:22 PDT 2008


Brendan Eich wrote:
> On Oct 27, 2008, at 8:21 AM, Maciej Stachowiak wrote:
> 
>>> A more functional multiple-case dispatch form would be like Scheme's
>>> `cond' or ML/Haskell `case'. God, we need macros.
>>
>> ECMAScript's switch is sort of halfway between Scheme cond and C
>> switch. Personally I think fall through and explicit break were
>> unnecessary concessions to C-likeness but I don't think they create
>> insurmountable problems. Case labels at arbitrary points in the code
>> would be much worse because it's hard to describe them in any way but
>> a controlled goto.
> 
> Netscape management said that JS had to "look like Java", which follows
> C in having fall-through from an upper case to a lower one. Same as C++.
> That's a big head-wind to tack against, and I was not prepared to
> explain yet another switch statement to Java-heads circa 1995.

Cyclone and Jacaranda require fall-through to be marked with an
explicit 'fallthru' token. I've use this convention for years in C,
and find that it does help even when not enforced by a compiler.

For Cyclone, see the first item of 'Restrictions' in
<http://cyclone.thelanguage.org/wiki/Switch%20Statements>.

For Jacaranda, this token is spelled as a comment for compatibility,
and is specified as follows:

   Each <CaseClause> or <DefaultClause> in a switch statement MUST:
    - have no statements, or
    - end with a /*fallthru*/ token, or
    - end with a <ContinueStatement>, <BreakStatement>, <ReturnStatement>,
      or <ThrowStatement>, or
    - be the last clause.

   The last clause in a switch statement MUST NOT end with a /*fallthru*/
   token.

-- 
David-Sarah Hopwood


More information about the Es-discuss mailing list