On Dec 20, 2012, at 12:12 PM, Tom Van Cutsem wrote: > 2012/12/20 Allen Wirfs-Brock <[email protected]> > Yes, here is the new step 5 as I have just updated it in my spec. draft > (ignore the 1, it's really 5) > If IsDataDescriptor(ownDesc) is true, then > If ownDesc.[[Writable]] is false, return false. > If Type(Receiver) is not Object, return false. > Let existingDescriptor be be the result of calling the [[GetOwnProperty]] > internal method of Receiver with argument P. > ReturnIfAbrupt(existingDescriptor). > If existingDescriptor is not undefined, then > Let valueDesc be the Property Descriptor {[[Value]]: V}. > Return the result of calling the [[DefineOwnProperty]] internal method of > Receiver with arguments P and valueDesc. > Else Receiver does not currently have a property P, > Return the result of performing CreateOwnDataProperty(Receiver, P, V). > > Allen > > Looks good! > > As you note, with the introduction of a user-facing Reflect.set function, > Receiver can be an arbitrary object. Thus, it may be that existingDescriptor > denotes an accessor property, in which case the [[DefineOwnProperty]] call > will fail, but this is perfectly acceptable.
Maybe not fail. If existingDescriptor is an accessor descriptor with [[Configurable]]: true, then the [[DefineOwnProperty]] call will convert the property into a data property. But maybe that is also ok as this situation could only occur via direct use of Reflect.put or perhaps a strangely defined proxy handler. Both of those are new situations where we are free to define the semantics. Allen
_______________________________________________ es-discuss mailing list [email protected] https://mail.mozilla.org/listinfo/es-discuss

