On Jan 6, 2012, at 8:03 AM, Mark S. Miller wrote: > No sorry, I just spotted the flaw. The observable difference is that a > conforming browser is not required by the (ES5 + ES6) specs to provide any > non-triggering ES6 features for program #2. In that case, we again have three > mode. > > For example, since legacy constrains us from making nested named function > declarations a triggering feature, if program #2 has a nested named function > and the browser rejected it, that browser would still conform to both the ES5 > and ES6 spec.
Implementations that currently support extensions to ES5 (and wish to continue to support them) must classify their extensions into one of the four categories I identified and then process them according to the state machine. Because no currently implementation of function declarations within blocks (that I'm aware of) matches the ES6 lexical scoping semantics, it would expect such function declarations to be classified as ES5~ES6. Then, according to the state machine, a program like: function f(g) { //not the following will produce inconsistent results among common browsers if (!g) { function g() {return 1} } else if (typeof g !== 'function') { function g() {return 2} } return g; } will be processed using the (implementation extended) ES5 specification and both f and g would presumably be non-strict functions. If you wanted the above to be processed as ES6 code you would need to add some ES6-only features such as: let ES6; or use some other forced opt-in such as a version in the MIME type. The above is exactly analogies to how any "standard" ES5~ES6 features would be treated. Allen _______________________________________________ es-discuss mailing list es-discuss@mozilla.org https://mail.mozilla.org/listinfo/es-discuss