noSuchMethod: "funargs" + "invoke-only-phantoms"

Dmitry Soshnikov dmitry.soshnikov at
Wed Dec 21 11:13:46 PST 2011

On 20.12.2011 17:00, Tom Van Cutsem wrote:
>     - @Tom: Found bugs in DirectProxies.js
> Thanks for reporting, but I don't think these are bugs:
>        1. Properties created via assignment gets `false' value for
>     descriptor attributes; should be true. E.g. = 10, where
>     `foo' is direct proxy, makes bar non-configurable
> I can't reproduce this. Both in tracemonkey and ff8 I get the following:
> js> var t = {}
> js> var p = Proxy(t, {})
> js> p.x = 1
> 1
> js> Object.getOwnPropertyDescriptor(t, 'x')
> ({value:1, writable:true, enumerable:true, configurable:true})
> js> Object.getOwnPropertyDescriptor(p, 'x')
> ({value:1, writable:true, enumerable:true, configurable:true})
> There is, however, a TM-specific bug that I suspect may be the cause 
> of your observed "non-configurable by default" behavior: 
> <>

Hm, I can't reproduce it either now (latest release Firefox, WinXP). 
Perhaps it was really the bug you noticed with my Firefox at work.

>        2. Can't return descriptor with `configurable: false' for
>     non-existing property; get: "cannot report a non-configurable
>     descriptor for non-existent property" But we need it in case
>     virtual methods
> You can (and probably should) advertise a virtual method as 
> configurable:true.

I can only `configurable: true', but as we said, to fix broken `delete' 
operator, we need to treat these virtual properties as non-configurable. 
We logically `return false' in `delete' trap and have to adjust 
`getOwnPropertyDescriptor' as well.

Well, how to say "have to..."? It just seems the most logical 
justification of this broken invariant -- to treat them as 
non-configurable. Yes, and by the way, also as non-enumerable since they 
will not appear in the for-in.

> The proxy throws this exception because, for properties that do not 
> exist on the wrapped target, it cannot guarantee that they will always 
> be non-configurable.

What to do with these virtual properties then? It would be good to have 
them {configurable: false, enumerable: false, writable: true, value: 

> For example, if your proxy handler now says that "foo" is {value:10, 
> configurable:false}, nothing stops your proxy handler from later 
> claiming that "foo" is {value:0, configurable:true}.

Wait, but we can do the same for any property, including existing. Or am 
I missing something?


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <>

More information about the es-discuss mailing list