if(xpcc && id == xpcc->GetConstructorStrID())
if(xpcc && id == xpcc->GetStringID(XPCContext::IDX_CONSTRUCTOR))
WrappedNative_GetProperty(JSContext *cx, JSObject *obj, jsid id, jsval *vp){    nsXPCWrappedNative* wrapper;    wrapper = (nsXPCWrappedNative*) JS_GetPrivate(cx, obj);    if(!wrapper)    {        XPCContext* xpcc = nsXPConnect::GetContext(cx);        if(xpcc && id == xpcc->GetConstructorStrID())        {            // silently fail when looking for constructor property            *vp = JSVAL_VOID;            return JS_TRUE;        }        return JS_FALSE;    }    nsXPCWrappedNativeClass* clazz = wrapper->GetClass();    NS_ASSERTION(clazz,"wrapper without class");    const XPCNativeMemberDescriptor* desc = clazz->LookupMemberByID(id);    if(desc)    {        if(desc->IsConstant())            return clazz->GetConstantAsJSVal(cx, wrapper, desc, vp);        else if(desc->IsMethod())        {            // allow for lazy creation of 'prototypical' function invoke object            JSObject* invokeFunObj = clazz->GetInvokeFunObj(desc);            if(!invokeFunObj)                return JS_FALSE;            // Create a function object with this wrapper as its parent, so that            // JSFUN_BOUND_METHOD binds it as the default 'this' for the function.            JSObject *funobj = JS_CloneFunctionObject(cx, invokeFunObj, obj);            if (!funobj)                return JS_FALSE;            *vp = OBJECT_TO_JSVAL(funobj);            return JS_TRUE;        }        else    // attribute            return clazz->GetAttributeAsJSVal(cx, wrapper, desc, vp);    }    else    {        nsIXPCScriptable* ds;        if(NULL != (ds = wrapper->GetDynamicScriptable()))        {            JSBool retval;            if(NS_SUCCEEDED(ds->GetProperty(cx, obj, id, vp,                        wrapper, wrapper->GetArbitraryScriptable(), &retval)))                return retval;        }        // XXX silently fail when property not found or call fails?        *vp = JSVAL_VOID;        return JS_TRUE;    }}