Strict mode support has just landed in WebKit. While running few simple tests on it (<a href="http://kangax.github.com/es5-compat-table/strict-mode/">http://kangax.github.com/es5-compat-table/strict-mode/</a>), I noticed that WebKit reports some of the errors early. For example, as far as I understand, assignment to an unresolvable reference (in strict mode) ought to throw ReferenceError — as explained in 11.13.1 (Simple Assignment) and 8.7.2 (PutValue).<div>
<br></div><div>&quot;use strict&quot;;</div><div>i_dont_exist = 1; // &lt;-- should throw ReferenceError</div><div><br></div><div>However, in WebKit this is a SyntaxError (with a somewhat cryptic message of &quot;Parse Error&quot;, but that&#39;s irrelevant here).</div>
<div><br></div><div>What I&#39;m not sure about is whether this is allowed per Chapter 16. The list of early errors does not include this scenario. It does allow to treat &quot;assignment to non-reference&quot; as an early error (e.g. 3 = 4), but says nothing about assignment to an unresolvable reference. It also seems to disallow any deviations in a very explicit manner:</div>
<div><br></div><div>  &quot;An implementation shall not treat other kinds of errors as early errors even if the compiler can prove that a construct cannot execute without error under any circumstances. An implementation may issue an early warning in such a case, but it should not report the error until the relevant construct is actually executed.&quot;</div>
<div><br></div><div>The reason I&#39;m bringing this up is because my test suite expected ReferenceError, and so looked like:</div><div><br></div><div>try {</div><div>  i_dont_exist = 1;</div><div>}</div><div>catch(err) {</div>
<div>  assert(err instanceof ReferenceError);</div><div>}</div><div><br></div><div>...which resulted in SyntaxError, preventing entire set from running. </div><div><br></div><div>Is this kind of early errors allowed and I missed something in the specs? Or should one of — WebKit or spec —  be changed accordingly? Note that nightly FF — the only other browser with strict support at the moment — throws ReferenceError, as expected.</div>
<div><br></div><div>cc&#39;ing Oliver</div><div><br></div><div>Thank you.</div><div><br></div><div>-- </div><div>kangax</div>