On 3 July 2011 13:29, Tom Van Cutsem <[email protected]> wrote: > Comments?
Looks good to me. I agree with Mark's comment that it should do a (shallow) copy of the attributes object, though. I guess the obvious point would be in Object.defineProperty, before passing it to DefineProxyProperty. /Andreas > 2011/7/2 Andreas Rossberg <[email protected]> >> >> Hi Tom. >> >> On 2 July 2011 13:50, Tom Van Cutsem <[email protected]> wrote: >> > Hi Andreas, >> > First, you're right about the typing issue: >> > In ES5, for values of type Object, the signature for >> > [[DefineOwnProperty]] >> > would be: >> > [[DefineOwnProperty]](P: a property name, Desc: an internal property >> > descriptor, Throw: a boolean) >> > On trapping proxies, that signature would need to change to: >> > [[DefineOwnProperty]](P: a property name, Desc: an Object, Throw: a >> > boolean) >> >> I don't think such a change is consistent. [[DefineOwnProperty]] is >> invoked in a number of places in the spec, and I think in many of them >> the type of the receiver is not distinguished and may well be a proxy, >> so a proxy may then receive both kinds of descriptors. Moreover, I >> think it would be a mistake to make the appropriate case distinction >> everywhere -- you really want the internal method to have the same >> signature in all cases. >> >> > With that, I believe the strawman is otherwise internally consistent. In >> > [[DefineOwnProperty]] step 5, what will be passed to the user-defined >> > "defineProperty" trap is a proper Object, not an internal descriptor. >> > I did clarify the note you referred to, to be more explicit in this >> > regard. >> > I don't see an alternative to changing the signature of >> > [[DefineOwnProperty]]. It can't just receive an internal descriptor, as >> > it >> > doesn't preserve any non-standard attributes. >> >> How about simply bypassing [[DefineOwnProperty]] in >> Object.defineProperty for proxies, as I suggested in my reply to >> David? That seems to be the only place where additional objects can >> occur, or am I wrong? >> >> Cheers, >> /Andreas >> >> >> > 2011/7/1 Andreas Rossberg <[email protected]> >> >> >> >> On 1 July 2011 12:12, Andreas Rossberg <[email protected]> wrote: >> >> > I believe there is some "type" confusion in the proxy proposal spec >> >> > wrt property descriptors and their reification into attributes >> >> > objects. >> >> > >> >> > 1. In a note on the def of [[DefineOwnProperty]] for proxies, the >> >> > proposal says: >> >> > >> >> > "The Desc argument to this trap is a property descriptor object >> >> > validated by ToPropertyDescriptor, except that it also retains any >> >> > non-standard attributes present in the original property descriptor >> >> > passed to Object.defineProperty. See the semantics of the modified >> >> > Object.defineProperty built-in, below." >> >> > >> >> > That seems fishy, since according to ES5 8.10: >> >> > >> >> > "Values of the Property Descriptor type are records composed of named >> >> > fields where each fieldās name is an attribute name and its value is >> >> > a >> >> > corresponding attribute value as specified in 8.6.1." >> >> > >> >> > In particular, I take this to mean that property descriptors are not >> >> > objects (but abstract records), and that there cannot be any fields >> >> > whose name is not an attribute name. (In fact, in V8 we currently >> >> > encode property descriptors using objects, but the encoding is >> >> > different from the reified attributes object representation, and not >> >> > quite compatible with the idea of adding arbitrary other fields.) >> >> >> >> I forgot to say: step 5 of the definition invokes the defineProperty >> >> trap of the handler passing Desc as the second argument. But the >> >> handler expects a reified attributes object. >> >> >> >> > 2. In the modified definition of Object.defineProperty, the proposal >> >> > says in step 4.c: >> >> > >> >> > "Call the [[DefineOwnProperty]] internal method of O with arguments >> >> > name, descObj, and true." >> >> > >> >> > This is passing descObj, which in fact is _not_ a descriptor, but its >> >> > reification as an attributes object. >> >> > >> >> > /Andreas >> >> > >> >> _______________________________________________ >> >> es-discuss mailing list >> >> [email protected] >> >> https://mail.mozilla.org/listinfo/es-discuss >> > >> > > > _______________________________________________ es-discuss mailing list [email protected] https://mail.mozilla.org/listinfo/es-discuss

