Mark S. Miller wrote:

    Exactly correct. I didn't realize until reading your reply is that
    this is all that's necessary -- that it successfully covers all
    the cases I was thinking about without any further case division.


Here's another option, not clearly better or worse:


      [[DefineOwnProperty]] (P, Desc)

 1. let R be the result of calling the [[DefineOwnProperty]] internal
    method of/W/with arguments/P/and /Desc/.
 2. If/desc/.[[Configurable]] is present and*false*, then throw
    a*TypeError*exception.
 3. return R.

This is exactly like your solution, but with the order of the two steps switched. Perhaps the next breakage we see will tell us which of these to choose. If both are web compatible, then we need only pick which one we like better.

I like the shorter one (filling in from cited text below, here it is in full:


     [[DefineOwnProperty]] (P, Desc)

1. If /desc/.[[Configurable]] is present and/desc/.[[Configurable]] is
   *false*, then throw a *TypeError* exception.
2. Return the result of calling the [[DefineOwnProperty]] internal
   method of /W/ with arguments /P/ and /Desc/.


Besides being shorter, this doesn't call through to [[DOP]], which could have effects, and only then maybe-throw.

/be


        as opposed to the behavior I'd understood we were aiming for,
        which was:

        1)  If the [[Configurable]] field of Desc is not present or
Desc.[[Configurable]] is false, then throw a TypeError exception.

        ?  If so, that's certainly a change that is much more likely
        to be web-compatible...


    Good! It certainly takes care of the one concrete breakage we know
    about so far.

_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to