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 dev-tech-js-engine-internals@lists.mozilla.org https://lists.mozilla.org/listinfo/dev-tech-js-engine-internals