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

Reply via email to