Right, good point. No need to care about `existingDescriptor.[[Get]]` or 
`existingDescriptor.[[Set]]`

> On Apr 20, 2015, at 10:12 PM, Allen Wirfs-Brock <[email protected]> wrote:
> 
> 
> On Apr 20, 2015, at 6:52 PM, Caitlin Potter wrote:
> 
>> >>If the prop property accessed by super.prop is an accessor, super.prop = 
>> >>x; should invoke its setter. super.prop should invoke its getter.
>> >It does.  This is about what happens when that property is a data property 
>> >doesn't exist. What happens when we do  
>> >[[HomeObject]].[[GetPrototypeOf]]().[[Set]]('prop', x, this)
>> 
>> I don’t think the accessor case does work. `ownDesc` never refers to the 
>> property descriptor of the receiver when O[P] is a SuperReference, so if 
>> there’s an `this.prop` is an accessor, and `super.prop` doesn’t exist, the 
>> data descriptor path is taken.
> 
> `ownDexc` refers to the property descriptor of the [[Prototype]] in this case 
> and if "super.prop is an accessor" that will be an accessor property 
> descriptor. That falls throw steps 4 and 5 and eventually invokes its setter 
> in step 9.  The Receiver (the original `this` value only is involved as the 
> `this` value passed in the call to the setter.
> 
> Allen
> 
> 
> 
> 
> 
> 
> 
> 
> 
>> 
>>> On Apr 20, 2015, at 9:37 PM, Allen Wirfs-Brock <[email protected] 
>>> <mailto:[email protected]>> wrote:
>>> 
>>> 
>>> On Apr 20, 2015, at 6:21 PM, Mark Miller wrote:
>>> 
>>>> If the prop property accessed by super.prop is an accessor, super.prop = 
>>>> x; should invoke its setter. super.prop should invoke its getter.
>>> 
>>> It does.  This is about what happens when that property is a data property 
>>> doesn't exist. What happens when we do  
>>> [[HomeObject]].[[GetPrototypeOf]]().[[Set]]('prop', x, this)
>>> 
>>> Allen
>>>    
>>> 
>>> 
>>> 
>>> 
>>> 
>>> 
>>> 
>>> 
>>>> 
>>>> On Tue, Apr 21, 2015 at 4:18 AM, Allen Wirfs-Brock <[email protected] 
>>>> <mailto:[email protected]>> wrote:
>>>> 
>>>> On Apr 20, 2015, at 12:39 PM, Jason Orendorff wrote:
>>>> 
>>>>> On Mon, Apr 20, 2015 at 12:44 PM, Allen Wirfs-Brock
>>>>> <[email protected] <mailto:[email protected]>> wrote:
>>>>>>> In the spec, 9.1.9 step 4.d.i. is where `super.prop = 2` ends up, with
>>>>>>> O=X.prototype.
>>>>>> 
>>>>>> 4.d.1 doesn't set the property, it just comes up with the property 
>>>>>> descriptor to use, if the `Receiver` does not already have a 
>>>>>> corresponding own property.
>>>>>> 
>>>>>> 5.c+5.e checks if the corresponding own property actually exists on the 
>>>>>> `Receiver`.
>>>>>> 
>>>>>> If it already exits then it does a [[DefineOwnProperty]] that only 
>>>>>> specifies the `value` attribute. This should respect the current 
>>>>>> `writable` attribute of the property and hence reject the attempt to 
>>>>>> change the value.
>>>>> 
>>>>> I agree with all of this, except I don't see where the attempt is
>>>>> rejected. Since the property is configurable, I think
>>>>> [[DefineOwnProperty]] succeeds.
>>>>> 
>>>>> The property is still non-writable afterwards. Only the value changes.
>>>>> 
>>>>> So this isn't breaking the object invariants: the property in question
>>>>> is configurable, so it's OK (I guess) to change the value. It's just
>>>>> surprising for assignment syntax to succeed in doing it.
>>>> 
>>>> I think it's bogus and needs to be corrected.  Not only does it allow (in 
>>>> weird cases for [[Set]] (ie, assignment) to change the value of a 
>>>> non-writable property.  It also means there are cases where [[Set]] will 
>>>> convert an accessor property to a data property.
>>>> 
>>>> In combination, I think this is a serious bug that needs to be fix in the 
>>>> final published ES6 spec.  The fix I propose is in 9.1.9 to replace Set 
>>>> 5.e as follows:
>>>> 
>>>> 5.e If existingDescriptor is not undefined, then
>>>>        i.   If IsAccessorDescript(existingDescript), return false.
>>>>        ii.  If existingDescriptor.[[Writable]] is false, return false.
>>>>        iii.  Let valueDesc be the PropertyDescriptor{[[Value]]: V}.
>>>>        iv.  Return Receiver.[[DefineOwnProperty]](P, valueDesc).
>>>> 
>>>> Lines 5.e.i and 5.e.ii are new additions.
>>>>  
>>>> Thoughts?
>>>> Allen
>>>> 
>>>> 
>>>> _______________________________________________
>>>> es-discuss mailing list
>>>> [email protected] <mailto:[email protected]>
>>>> https://mail.mozilla.org/listinfo/es-discuss 
>>>> <https://mail.mozilla.org/listinfo/es-discuss>
>>>> 
>>>> 
>>>> 
>>>> 
>>>> -- 
>>>> Text by me above is hereby placed in the public domain
>>>> 
>>>>   Cheers,
>>>>   --MarkM
>>> 
>>> _______________________________________________
>>> es-discuss mailing list
>>> [email protected] <mailto:[email protected]>
>>> https://mail.mozilla.org/listinfo/es-discuss 
>>> <https://mail.mozilla.org/listinfo/es-discuss>
>> 
> 

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

Reply via email to