[[CanPut]] semantics

Oliver Hunt oliver at apple.com
Sat Sep 15 12:38:29 PDT 2012


> 5. Let inherited be the result of calling the [[GetProperty]] internal method of proto with property name P.

Gah, [[GetProperty]] not [[GetOwnProperty]] -- and we don't care about prototype extensibility? (i think we came to that conclusion in redmond?)

--Oliver


On Sep 14, 2012, at 7:05 PM, Brendan Eich wrote:

> Oliver Hunt wrote:
>> My reading of [[CanPut]] implies that it only checks a single level of the prototype chain.  This seems incorrect to me but I thought I'd check whether it is in fact intentional, or whether it's a spec bug.
> 
> See step 4 and later.
> 
> /be
> 
> ES5.1 8.12.4 [[CanPut]] (P)
> 
> When the [[CanPut]] internal method of O is called with property name P, the following steps are taken:
> 
> 1. Let desc be the result of calling the [[GetOwnProperty]] internal method of O with argument P.
> 2. If desc is not undefined, then
> a. If IsAccessorDescriptor(desc) is true, then
>  i. If desc.[[Set]] is undefined, then return false.
>  ii. Else return true.
> b. Else, desc must be a DataDescriptor so return the value of desc.[[Writable]].
> 3. Let proto be the [[Prototype]] internal property of O.
> 4. If proto is null, then return the value of the [[Extensible]] internal property of O.
> 5. Let inherited be the result of calling the [[GetProperty]] internal method of proto with property name P.
> 6. If inherited is undefined, return the value of the [[Extensible]] internal property of O.
> 7. If IsAccessorDescriptor(inherited) is true, then
> a. If inherited.[[Set]] is undefined, then return false.
> b. Else return true.
> 8. Else, inherited must be a DataDescriptor
> a. If the [[Extensible]] internal property of O is false, return false.
> b. Else return the value of inherited.[[Writable]].
> 
> Host objects may define additional constraints upon [[Put]] operations. If possible, host objects should not
> allow [[Put]] operations in situations where this definition of [[CanPut]] returns false.



More information about the es-discuss mailing list