excluding features from sloppy mode

Oliver Hunt oliver at apple.com
Wed Jan 16 12:08:54 PST 2013


On Jan 16, 2013, at 11:54 AM, Domenic Denicola <domenic at domenicdenicola.com> wrote:

> Coincidentally, I compiled a list of interesting cases a few days ago, for both const and let. They were meant to be used in kangax's ES6 compatibility table:
> 
> https://github.com/kangax/es5-compat-table/issues/58
> 
> In short:
> 
> const x; // SyntaxError
> let x; let x; // SyntaxError
> const x = 5; const x = 5; // SyntaxError
> x; const x = 5; // ReferenceError
> x; let x; // ReferenceError
> const x = 2; { x; const x = 5; } // ReferenceError
> let x; { x; let x; } // ReferenceError
> 
> plus a test of fresh per-loop iteration for let
> 
> Corrections welcome, and kudos to Brandon Benvie on pointing me to the fact that those last four should be ReferenceErrors.

I'm not too interested in what the spec says these should/should not be.  I'm interested in what _shipping_ browser engines do.  Presumably IE throws on all of them, but we need a nice table for const which is "supported" by multiple engines to show the differences in behaviour so that we can determine the best intersection.

--Oliver

> 
> ________________________________________
> From: es-discuss-bounces at mozilla.org [es-discuss-bounces at mozilla.org] on behalf of Oliver Hunt [oliver at apple.com]
> Sent: Wednesday, January 16, 2013 14:40
> To: Brendan Eich
> Cc: Mark S. Miller; Mark Miller; es-discuss at mozilla.org
> Subject: Re: excluding features from sloppy mode
> 
> Even 10?  If that's the case anything using const is inherently tied to jsc,v8,moz,opera behaviour.
> 
> Presumably the strictest of those _works_, but maybe i'm wrong?
> 
> We should probably just enumerate all the differences and see which can be coalesced and which make "sense" in sloppy mode.
> 
> Obvious cases i can think of:
> 
> --
> const x;
> --
> var x;
> const x;
> x = 5;
> --
> const x;
> var x;
> x = 5;
> --
> const x =4;
> var x = 5;
> log(x)
> --
> if (..)
>   const x = ....
> else
>   const x = ....
> --
> 
> That's it for now.  Maybe block scoping const will work in sloppy mode?  is for (const x = ...) valid?
> 
> --Oliver
> 
> 
> 
> On Jan 16, 2013, at 11:31 AM, Brendan Eich <brendan at mozilla.com> wrote:
> 
>> There's no const in IE, so we are pretty sure we can take the hit of breaking "Mozilla" (non-IE branches, also WebKit, maybe Opera) code that uses const.
>> 
>> /be
>> 
>> Brandon Benvie wrote:
>>> The incompatibilities between let/const as implemented in V8 and Spidermonkey and how they're specified in ES6 are an additional factor:
>>> 
>>> * Per iteration loop binding (V8 and Spidermonkey don't do this for let/const).
>>> * TDZ. `x; const x = 10` works in V8 and Spidermonkey currently, specified to throw ReferenceError in ES6
>>> 
>>> I think there's other differences.
> 
> _______________________________________________
> es-discuss mailing list
> es-discuss at mozilla.org
> https://mail.mozilla.org/listinfo/es-discuss
> 
> 



More information about the es-discuss mailing list