Le 12/09/2013 15:35, Mark S. Miller a écrit :
On Thu, Sep 12, 2013 at 4:14 AM, Tom Van Cutsem <[email protected] <mailto:[email protected]>> wrote:

    [+markm, allenwb]

    But more generally, you're right that it's odd [[GetInheritance]]
    is doing an invariant check on an otherwise
    extensible/configurable object. I think it's simply a remnant of
    the time before we fully embraced setPrototypeOf.


agreed


    Now that Object.setPrototypeOf is part of ES6, there doesn't seem
    to be a point in guaranteeing the stability of
    Object.getPrototypeOf for extensible objects.

    The important invariant is that getPrototypeOf remain stable for
    non-extensible objects.

    Hence, it seems we could replace steps 8-10 of
    Proxy.[[GetInheritance]]
    <https://people.mozilla.org/%7Ejorendorff/es6-draft.html#sec-9.3.1> with:

    8. Let extensibleTarget be the result of IsExtensible(target).
    9. ReturnIfAbrupt(extensibleTarget).
    10. If extensibleTarget is true, then return handlerProto.
    // steps below identical to the old steps 8-10:
    11. Let targetProto be the result of calling the
    [[GetInheritance]] internal method of target.
    12. ReturnIfAbrupt(targetProto).
    13. If SameValue(handlerProto, targetProto) is false, then throw a
    TypeError exception.

    Mark, Allen, does that seem right?


yes.
Based on this new fresh agreement and assuming it sticks, the answer to Boris initial question changes a bit then: if B.isPrototypeOf(A) and A' = new Proxy(A, handler), then the handler.getPrototypeOf can return any object (including B', a membrane-proxy to B) as long as A is extensible. If the code that runs against your membrane is not expected to be allowed to change extensiveness, you don't need a shadow target.

David
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to