<html><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div><div>On Aug 24, 2008, at 3:40 PM, Mark S. Miller wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><span class="Apple-style-span" style="-webkit-text-stroke-width: -1; ">Interesting point. We may have let property semantics again needlessly</span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">corrupt variable semantics.</div></blockquote><div><br></div>That's a recurring risk due to the spec's modeling scopes via objects (a botch that most of us involved all along regret, but hard to fix in any kind of 3.x spec delta).</div><div><br></div><div><br><blockquote type="cite"><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">Non-strict assignment to a non-writable</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">property must fail silently for legacy compatibility. But I don't</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">think there's any corresponding legacy constraint on assignment to a</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">const variable. I agree that this should throw regardless of</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">strictness.</div></blockquote><div><br></div>Yes, it would be best to throw always -- this is easy to get right now, while we have the chance with ES3.1, for variables that do not map in the spec or implementations to properties.</div><div><br></div><div>But const at top level makes a global object property. And thanks to the spec's abusing objects for scopes, it seems to happen at function body top-level in function activations. If you have</div><div><br></div><div>function foo(x, z) {</div><div>    const y = x;</div><div>    return eval(z);</div><div>}</div><div><br></div><div>The spec talks about the activation object for foo having properties x and z, and any extension <i>a la</i> 3.1 would probably have to do likewise for const. Otherwise you're making a new kind of scope, not visible to eval'ed code.</div><div><br></div><div>/be</div><br></body></html>