It looks like ProxyClass is only used for the "Proxy" object that we add to the global (i.e., the thing that allows you to do Proxy.create). That object isn't actually a proxy at all. It probably would make sense to rename ProxyClass to something less confusing.
-Bill ----- Original Message ----- > From: "Nicholas Nethercote" <[email protected]> > To: "JS Internals list" <[email protected]> > Sent: Wednesday, June 19, 2013 11:33:12 PM > Subject: [JS-internals] Proxy question > > Hi, > > Here's some code from jsproxy.h: > > > inline bool IsObjectProxyClass(const Class *clasp) > { > return clasp == &js::ObjectProxyClass || clasp == > &js::OuterWindowProxyClass; > } > > inline bool IsFunctionProxyClass(const Class *clasp) > { > return clasp == &js::FunctionProxyClass; > } > > inline bool IsProxy(JSObject *obj) > { > Class *clasp = GetObjectClass(obj); > return IsObjectProxyClass(clasp) || IsFunctionProxyClass(clasp); > } > > > So... IsProxy() succeeds if an object has one of the following > classes: FunctionProxyClass, ObjectProxyClass, > OuterWindowProxyClass. > However, it fails if the object's class is ProxyClass. This is... > surprising. Is it a bug? > If I try changing IsProxy() to allow ProxyClass I get assertion > failures. > > There's a similar case in jsfriendapi.h where ProxyClass is ignored: > > inline bool > GetObjectProto(JSContext *cx, JS::Handle<JSObject*> obj, > JS::MutableHandle<JSObject*> proto) > { > // njn: hmm > js::Class *clasp = GetObjectClass(obj); > if (clasp == &js::ObjectProxyClass || > clasp == &js::OuterWindowProxyClass || > clasp == &js::FunctionProxyClass) > { > return JS_GetPrototype(cx, obj, proto.address()); > } > > > > Nick > _______________________________________________ > dev-tech-js-engine-internals mailing list > [email protected] > https://lists.mozilla.org/listinfo/dev-tech-js-engine-internals > _______________________________________________ dev-tech-js-engine-internals mailing list [email protected] https://lists.mozilla.org/listinfo/dev-tech-js-engine-internals

