ECMAScript spec assertion fails when binding is deleted?

Jim Blandy jimb at mozilla.com
Mon Mar 21 11:44:42 PDT 2011


This is a bug in the spec, and has been previously discussed here:

https://mail.mozilla.org/pipermail/es5-discuss/2010-November/003839.html

(Thanks, Jeff!)

On 03/20/2011 11:22 PM, Jim Blandy wrote:
> When executing this code:
>
>     (function () {
>          eval("var x=delete(x)")
>     })()
>
> I think the assertion in the ECMAScript description of the declarative 
> environment record's SetMutableBinding algorithm, 10.2.1.1.3 step 2, 
> fails.
>
>     * On entry to the function, we create a lexical environment with a
>       declarative environment record (10.4.3).
>     * When we enter the eval code, we create the binding for 'x' in
>       that environment record  (10.5, step 8.c.1). This is a deletable
>       binding, as per 10.5 step 2.
>     * When we evaluate the declaration, we produce a reference with
>       that environment record as its base, delete the binding, and
>       then call PutValue (12.2, VariableDeclaration : Identifier
>       Initialiser semantics).
>     * PutValue calls the environment record's SetMutableBinding
>       concrete method (8.7.2 step 5.a).
>     * SetMutableBinding's assertion fails, because 'x' is no longer
>       bound in that environment record (10.2.1.1.3 step 2).
>
> Have I missed something?
>
>
> _______________________________________________
> es-discuss mailing list
> es-discuss at mozilla.org
> https://mail.mozilla.org/listinfo/es-discuss

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20110321/e3f9da5b/attachment-0001.html>


More information about the es-discuss mailing list