Minor type confusion in proxies proposal?

Tom Van Cutsem tomvc.be at gmail.com
Sat Jul 2 04:50:13 PDT 2011


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)

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.

Cheers,
Tom

2011/7/1 Andreas Rossberg <rossberg at google.com>

> On 1 July 2011 12:12, Andreas Rossberg <rossberg at google.com> 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
> es-discuss at mozilla.org
> https://mail.mozilla.org/listinfo/es-discuss
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20110702/dc63a67c/attachment-0001.html>


More information about the es-discuss mailing list